如何在 macOS 上以编程方式将文件和文件夹移动到垃圾箱?

How to move files and folders to Trash programmatically on macOS?

我能找到的关于这个主题的所有内容都是提到 FSMoveObjectToTrashSync 函数,现在是 deprecated and no alternative is listed for it

如何从 C 或 Objective-C 代码做到这一点?

使用 NSFileManager:

https://developer.apple.com/documentation/foundation/nsfilemanager

  • trashItemAtURL:resultingItemURL:error: Moves an item to the trash.

在 C 中,您可以使用 AppleScript 将文件移动到回收站。这是一个简单的例子:

#include <stdio.h>
#include <stdlib.h>

#define PATH "/tmp/"
#define NAME "delete-me.txt"

int main() {
    int status;

    /* Create a file */
    FILE *f;
    f = fopen(PATH NAME, "w");
    if (!f) {
        fputs("Can't create file " PATH NAME "\n", stderr);
        return 1;
    }
    fputs("I love trash\n", f);
    fclose(f);

    /* Now put it in the trash */
    status = system(
        "osascript -e 'set theFile to POSIX file \"" PATH NAME "\"' "
                  "-e 'tell application \"Finder\"' "
                      "-e 'delete theFile' "
                  "-e 'end tell' "
                  ">/dev/null"
    );

    if (status == 0) {
        puts("Look in the trash folder for a file called " NAME);
    }
    else {
        puts("Something went wrong. Unable to delete " PATH NAME);
    }
    return 0;
}

一些注意事项:

  • 多行脚本必须作为多个 -e 命令行选项发送。
  • 由于 osascript 坚持将状态消息打印到命令行控制台,我已将其输出重定向到 /dev/null但是,如果回收站中已经存在同名文件,则删除的文件将被重命名。如果您需要知道此名称,则必须使用 popen() 而不是 system() 并从 osascript.
  • 解析 return 字符串