检查目录是否为空,或仅在Objective-C中为空时删除

Pot*_*ter 3 objective-c nsurl nsfilemanager

NSFileManager removeItemAtURL仅执行递归删除.非空目录没有特殊处理.

如何通过事先测试条件来仅删除空目录?有contentsOfDirectoryAtPath一个文件列表,可能是空的,但这是过度的.

或者,是否有一个功能,只有在空的情况下才能将其删除,就像好的一样rmdir?啊,我可以称之为......

Sve*_*ven 7

你必须使用它,如果你想留在基金会的土地,没有别的办法.

但是如果你这样做,你会引入竞争条件:在列出目录的内容之后,在删除它之前,其他一些程序可能会在那里写一个新文件然后被删除.因此,您必须接受删除文件夹(包括其所有内容)或您必须查找其他API的事实.

您可以使用POSIX rmdir函数来实现这样的目标:

NSString *path = [url path];
int result = rmdir( [path fileSystemRepresentation] );
if (result == 0) // everything ok
else // lookup error code from errno
Run Code Online (Sandbox Code Playgroud)

如果目录不为空,则会收到错误代码ENOTEMPTY.