Удалить каталог, если он пуст
Я пытаюсь проверить, если папка пуста, и если это так, удалите ее, используя следующий код:
NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
if (!folderContents){
if (folderContents.count == 0)
{
NSLog(@"empty");
[[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
}
}
Это не сработало, и я предполагаю, что пропустил что-то глупое, но был бы признателен за любые указатели.
- Обновление: проблема была в моей собственной глупости - уходить
!
на второй линии. Удалите это, и это работает как ожидалось.
4 ответа
Решение
Вы хотите это:
NSError *error = nil;
NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
if (folderContents) {
if (folderContents.count == 0) {
NSLog(@"empty");
[[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
}
} else {
// log error
}
Иногда методы POSIX более эффективны:
#include <unistd.h>
if (rmdir([theDirectory fileSystemRepresentation]) == 0) {
// directory successfully removed (must have been empty!)
} else if (errno == ENOTEMPTY) {
// directory not empty
} else {
// other error
}
rmdir()
удаляет каталог, только если он пуст, поэтому нет необходимости перечислять каталог раньше.
Я предполагаю, что либо "theDirectory" равен nil, либо указывает на каталог, который не существует, потому что только в этих случаях "! FolderContents" будет иметь значение true. Если "theDirectory" будет указывать на существующую папку, вы получите пустой массив и не попадете в блок "if".
Попробуй это:
NSArray *folderContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:theDirectory error:&error];
//if (!folderContents)
if (folderContents.count == 0)
{
NSLog(@"empty");
[[NSFileManager defaultManager] removeItemAtPath:theDirectory error:&error];
}