我目前正在尝试在目标C中写入和读取同一文件。
在我尝试写入捆绑的文本文件之前。从那以后,我了解到这是不可接受的。我知道在写入文件时存在权限问题。
我开始面临一些错误,主要是由于我对Objective C缺乏经验,尤其是IO。当我尝试写入现有文本文件时,我在哪里将文件放在项目中?目前我只是将文件拖放到我的项目中;我认为这是不正确的,这是我的大多数问题来自的地方。
这是我编写文本文件的代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"myFile.txt"];
NSFileHandle *filehandle = [NSFileHandle fileHandleForWritingAtPath:filePath];
[filehandle seekToEndOfFile];
[filehandle writeData:[@"Hello World" dataUsingEncoding:NSUTF8StringEncoding]];
调试时,元素filePath
包含一个非常长的目录,该目录甚至不在我的项目目录中。
以下是我写入文件的代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"myFile.txt"];
NSError *error;
NSString *fileContents = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];
if (error)
NSLog(@"Error reading file: %@", error.localizedDescription);
myArray = [fileContents componentsSeparatedByString:@"\n"];
据我所知,大部分文件来自文件所在的位置,我根本不知道放在哪里。在应用程序关闭后,我还希望能够在物理上打开并查看文件的内容。
答案 0 :(得分:1)
iOS应用程序的文件系统受到一定限制,对规则的简单解释如下:
典型的文件夹结构是:
SandboxFolder
|
|--- Documents <-- this is the folder you are writing to in your code
|
|--- YourAppName.app <-- this is your bundle folder
|
|--- Library
| |
| |--- Caches
| |
| |--- Preferences
|
|--- tmp
简而言之,您添加到项目中的任何文件都将在您的应用程序包中结束,您可以读取应用程序中的文件,在包中查找文件的最简单方法是使用实用程序方法- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension
您可以在NSBundle documentation中找到有关该方法的信息。
您在代码示例中所做的工作有利于读取和写入文档文件夹(在沙箱中)中的文件,这很好但请记住,如果您的应用程序支持文档文件夹中的iCloud文件,自动上传到iCloud。有关详细信息,请查看iCloud documentation。
最后为了更好地了解文件夹结构的外观(模拟器和实际设备之间非常相似),您可以使用finder进行查看,只需按照以下步骤操作:
// print the path to the documents folder to the console //
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"Documents path: %@", documentsDirectory);
请注意,要查看捆绑包中的文件,您必须右键单击它并选择&#34;显示包裹内容&#34;从上下文菜单中。
我希望这会有所帮助。
答案 1 :(得分:0)
如果你在模拟器中尝试并想在mac中打开它
从日志中复制文件路径[不包括文件名] 打开查找器&gt; GO&gt;转到文件夹 将打开一个窗口粘贴路径并按Enter键
结果: 查找器中的窗口打开,显示
中的文件夹和文件答案 2 :(得分:0)
正如其他人所提到的,项目中的文件最终会出现在你的软件包中,所以你永远无法写信给他们(你可以/可以在Mac上使用老式的非签名应用程序 - 但你不应该' t,无论如何)。
你能做的是