如何制作iOS目录?
Posted
技术标签:
【中文标题】如何制作iOS目录?【英文标题】:How to make a directory iOS? 【发布时间】:2011-11-06 20:13:09 【问题描述】:好的,
所以我有一个需要更新的 Cydia 应用程序。我知道 Cydia 应用程序没有 Documents 文件夹,因此您必须创建一个。以下是我之前在 ios 4 中的制作方法(在 iOS 5 上不起作用):
mkdir("/var/mobile/Library/APPNAME", 0755);
mkdir("/var/mobile/Library/APPNAME/Documents", 0755);
NSString *foofile = @"/var/mobile/Library/APPNAME/Documents/database.db";
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:foofile];
if (fileExists == TRUE)
NSLog(@"already exists");
else
NSLog(@"doesn't exists");
NSFileManager *fileManager = [[NSFileManager defaultManager]autorelease];
NSError *error;
NSString *documentDBFolderPath = @"/var/mobile/Library/APPNAME/Documents/database.db";
NSString *resourceDBFolderPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"database.db"];
[fileManager copyItemAtPath:resourceDBFolderPath toPath:documentDBFolderPath error:&error];
我还包含了将数据库文件复制到该文件夹的代码。这不起作用(即使我通过 SSH 手动创建文件夹)。
请帮忙!谢谢。
【问题讨论】:
出了什么问题,或者我可以使用哪些其他代码来创建目录? 对,怎么了?你还没有告诉我们。没有错误消息,没有失败的描述。 @Daniel R Hicks:什么都没有发生。从下面的代码粘贴后,我确实收到了错误...Create directory error: Error Domain=NSCocoaErrorDomain Code=513 "The operation couldn’t be completed. (Cocoa error 513.)" UserInfo=0x1c2650 NSFilePath=/var/mobile/Library/APPNAME, NSUnderlyingError=0x1c3520 "The operation couldn’t be completed. Operation not permitted"
【参考方案1】:
这是我创建目录的方法
-(void)createDirectory:(NSString *)directoryName atFilePath:(NSString *)filePath
NSString *filePathAndDirectory = [filePath stringByAppendingPathComponent:directoryName];
NSError *error;
if (![[NSFileManager defaultManager] createDirectoryAtPath:filePathAndDirectory
withIntermediateDirectories:NO
attributes:nil
error:&error])
NSLog(@"Create directory error: %@", error);
【讨论】:
这是我得到的错误...The operation couldn’t be completed. Operation not permitted
这可能就是你要找的东西***.com/questions/4650488/…【参考方案2】:
尝试使用createDirectoryAtURL:withIntermediateDirectories:attributes:error:
。
NSFileManager
Class Reference:
createDirectoryAtURL:withIntermediateDirectories:attributes:error:
在指定路径创建具有给定属性的目录。
参数
url
- 指定要创建的目录的文件 URL。 如果要指定相对路径,则必须设置 在创建对应之前的当前工作目录 NSURL 对象。此参数不能为 nil。
createIntermediates
- 如果YES
,此方法会创建任何不存在的 父目录作为在 url 中创建目录的一部分。如果NO
, 如果任何中间父目录不存在,则此方法失败 不存在。如果有任何中间路径,此方法也会失败 元素对应于文件而不是目录。
attributes
- 新目录和任何新创建的文件属性 中间目录。您可以设置所有者和组号, 文件权限和修改日期。如果您为此指定 nil 参数或省略特定值,一个或多个默认值是 如讨论中所述使用。对于键列表,您可以 包含在本词典中,请参阅“常量”(第 54 页)部分列表 在属性字典中用作键的全局常量。一些 的键,例如 NSFileHFSCreatorCode 和 NSFileHFSTypeCode,做 不适用于目录。
error
- 在输入时,指向错误对象的指针。如果发生错误, 此指针设置为包含错误的实际错误对象 信息。如果不这样做,您可以为此参数指定 nil 想要错误信息。返回值
YES
如果 目录已创建或已存在,如果发生错误,则为 NO。
【讨论】:
用我的 iPad 回答时似乎有点慢...,其他答案似乎与此几乎相同。【参考方案3】:检查NSFileManager's class reference。要创建文件夹,您需要createDirectoryAtPath:withIntermediateDirectories:attributes:error:
【讨论】:
我试过了,没有创建文件夹...我认为这仅适用于 OSx,不适用于 iOS? 您是否使用YES
作为withIntermediateDirectories:
的参数?
NSFileManager *NSFm= [NSFileManager defaultManager]; [NSFm createDirectoryAtPath:@"/var/mobile/Library/APPNAME" withIntermediateDirectories:YES attributes:nil error:nil]; [NSFm createDirectoryAtPath:@"/var/mobile/Library/APPNAME/Documents" withIntermediateDirectories:YES attributes:nil error:nil];
是我使用的确切代码...
假设/var/mobile/Library/
存在,您不需要第一次调用,只需要第二次调用。你确定你有正确的写权限吗?它返回什么错误?【参考方案4】:
Superb Techotopia explanation of iOS5 filesystem
【讨论】:
【参考方案5】:在 Swift 中,如果存在或创建则返回 true。
func ensureDirectoryExists(path:String) -> Bool
if !NSFileManager.defaultManager().fileExistsAtPath(path)
do
try NSFileManager.defaultManager().createDirectoryAtPath(path, withIntermediateDirectories: true, attributes: nil)
catch
print(error)
return false
return true
【讨论】:
以上是关于如何制作iOS目录?的主要内容,如果未能解决你的问题,请参考以下文章