![](/img/trans.png)
[英]How to check if directory exists at particular path programmatically in Objective-C?
[英]How to check if a directory exists in Objective-C
我想這是一個初學者的問題,但我試圖檢查iPhone上的Documents文件夾中是否存在目錄。 我閱讀了文檔並提出了這段代碼,遺憾的是,它在BOOL fileExists行中與EXC_BAD_ACCESS崩潰:
-(void)checkIfDirectoryAlreadyExists:(NSString *)name
{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *path = [[self documentsDirectory] stringByAppendingPathComponent:name];
BOOL fileExists = [fileManager fileExistsAtPath:path isDirectory:YES];
if (fileExists)
{
NSLog(@"Folder already exists...");
}
}
我不明白我做錯了什么? 它看起來對我來說都很完美,它肯定符合文檔,不是嗎? 關於我哪里出錯的任何啟示都將受到高度贊賞! 謝謝。
更新:
還是行不通...
-(void)checkIfDirectoryAlreadyExists:(NSString *)name
{
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSString *path = [[self documentsDirectory] stringByAppendingPathComponent:name];
BOOL isDir;
BOOL fileExists = [fileManager fileExistsAtPath:path isDirectory:&isDir];
if (fileExists)
{
if (isDir) {
NSLog(@"Folder already exists...");
}
}
}
請查看此方法簽名的文檔 :
- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory
您需要一個指向BOOL var作為參數的指針,而不是BOOL本身。 NSFileManager將記錄該文件是否是該變量中的目錄。 例如:
BOOL isDir;
BOOL exists = [fm fileExistsAtPath:path isDirectory:&isDir];
if (exists) {
/* file exists */
if (isDir) {
/* file is a directory */
}
}
萬一有人需要一個getter,如果它不存在,會在Documents中創建一個文件夾:
- (NSString *)folderPath
{
if (! _folderPath) {
NSString *folderName = @"YourFolderName";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectoryPath = [documentPaths objectAtIndex:0];
_folderPath = [documentsDirectoryPath stringByAppendingPathComponent:folderName];
// if folder doesn't exist, create it
NSError *error = nil;
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir;
if (! [fileManager fileExistsAtPath:_folderPath isDirectory:&isDir]) {
BOOL success = [fileManager createDirectoryAtPath:_folderPath withIntermediateDirectories:NO attributes:nil error:&error];
if (!success || error) {
NSLog(@"Error: %@", [error localizedDescription]);
}
NSAssert(success, @"Failed to create folder at path:%@", _folderPath);
}
}
return _folderPath;
}
我有一個Utility單例類,我用它來做這樣的事情。 由於我無法更新我的數據庫,如果它仍然在Documents中,我使用此代碼將我的.sqlite文件從Documents復制到/ Library / Private Documents。 第一種方法找到庫。 第二個創建私有文檔文件夾(如果它不存在)並將該位置作為字符串返回。 第二種方法使用@wzboson使用的相同文件管理器方法。
+ (NSString *)applicationLibraryDirectory {
return [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
}
+ (NSString *)applicationLibraryPrivateDocumentsDirectory {
NSError *error;
NSString *PrivateDocumentsDirectory = [[self applicationLibraryDirectory] stringByAppendingPathComponent:@"Private Documents"];
BOOL isDir;
if (! [[NSFileManager defaultManager] fileExistsAtPath:PrivateDocumentsDirectory isDirectory:&isDir]) {
if (![[NSFileManager defaultManager] createDirectoryAtPath:PrivateDocumentsDirectory
withIntermediateDirectories:NO
attributes:nil
error:&error]) {
NSLog(@"Create directory error: %@", error);
}
}
return PrivateDocumentsDirectory;
}
我在持久存儲協調器初始化中使用它。 同樣的原則適用於任何文件。
NSString *libraryDirectory = [Utilities applicationLibraryPrivateDocumentsDirectory];
NSString *sourcePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:sqliteName];
NSString *destinationPath = [libraryDirectory stringByAppendingPathComponent:sqliteName];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.