使用swift以编程方式删除文件时,文件在哪里?

时间:2016-03-28 15:45:57

标签: swift macos nsfilemanager

以编程方式删除文件时,文件在哪里?我用这段代码删除了它们,但今天的垃圾桶是空的。是否可以检索它们?

let filemgr = NSFileManager.defaultManager()
        do{
            let filelist = try filemgr.contentsOfDirectoryAtPath(fontFolderPath)
            for filename in filelist {
                do{ try filemgr.removeItemAtPath(fontFolderPath+filename)} catch{}
            }
        }catch{}

3 个答案:

答案 0 :(得分:4)

使用NSFileManager的URL相关API,您有两个选择:

  • func removeItemAtURL(_ URL: NSURL) throws

    立即删除项目,如Terminal.app中的/bin/rm,并具有与removeItemAtPath相同的功能。

  • func trashItemAtURL(_ url: NSURL, resultingItemURL outResultingURL: AutoreleasingUnsafeMutablePointer<NSURL?>) throws

    将项目移动到垃圾箱文件夹,通过输入指针返回垃圾箱中物品的位置。

答案 1 :(得分:2)

removeItemAtPath方法删除它们。他们走了。如果您想将某些内容移至垃圾箱,则需要使用NSWorkSpace。您可以在此处查看将整个目录移至废纸篓的示例:Move directory to trash

答案 2 :(得分:1)

基本上unixy系统以相同的方式管理文件,有一个引用计数,即硬链接数+文件打开次数...所以你可以打开一个文件,文件仍然存在,你可以使用有效的file descriptorFILE *流对象写入并读取它,然后当它关闭时,文件实际上将从磁盘中删除...

int fd = open("somefile", O_RDWR);
unlink("somefile"); // removes somefile from the directory listing, but not disk
write(fd, "hello", 5);
lseek(fd,0,SEEK_SET); // seek to start of file 
char buffer[6] = {0};
read(fd,buffer,5); // reads in "hello"
close(fd); // last reference removed, file is removed.

如果要将文件移动到废纸篓,这是一个不同的操作,特定于OS X和iOS