如何在 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 字符串
我能找到的关于这个主题的所有内容都是提到 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 字符串