【问题标题】:Writing data to the file on device and reading it back from the device (iPhone)将数据写入设备上的文件并从设备(iPhone)中读取
【发布时间】:2012-04-15 14:07:38
【问题描述】:

在您的设备上以编程方式创建 file.txt,然后在您的应用程序中写下一些数据并将这些数据发送到您的计算机的最简单方法是什么?

我猜最后一部分可以通过编程方式完成,就像使用计算机上的某些程序从设备获取数据一样。

直到现在我都在做这样的事情

NSFileHandle *infile;
NSFileManager *fm;
fm=[NSFileManager defaultManager];
NSString *strings=[@"/Downloads/file.txt" stringByExpandingTildeInPath];

if (![fm fileExistsAtPath:strings]) {
 [fm createFileAtPath:strings contents:nil attributes:nil];
 infile=[NSFileHandle fileHandleForWritingAtPath:strings];
 [infile writeData:[[NSString stringWithFormat:@"lalala japierdole\n", [NSDate date]] dataUsingEncoding:NSUTF8StringEncoding]];
}else {
 infile=[NSFileHandle fileHandleForWritingAtPath:strings];
 [infile seekToEndOfFile];
}
[infile writeData:[[NSString stringWithFormat:@"lulukukuioio.\n", [NSDate date]] dataUsingEncoding:NSUTF8StringEncoding]];

如果文件不存在,这只是创建文件并写下一些数据,但路径有问题。当我在我的设备上尝试使用模拟器时,这段代码运行良好,然后我真的不知道我是否创建了文件以及以后如何从它接收。

【问题讨论】:

  • 顺便说一句,将字符串与 write 语句分开创建会很有帮助,这样可以在调试器和/或NSLog 语句中验证字符串。 write 语句中有很多方法调用。请参阅@EricS 了解您的问题的答案。

标签: ios iphone nsfilehandle


【解决方案1】:

用于读取和写入原始数据到文件的最简单 API:

NSData *data = [NSData dataWithContentsOfFile:path];
[data writeToFile:path atomically:NO];

您遇到问题的原因是您的路径在设备上无效。试试这个:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
if ( paths.count > 0 )
{
  NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"file.txt"];
  NSData *data = [NSData dataWithContentsOfFile:path];
  ...
}

【讨论】:

  • 有什么理由需要测试paths.count > 0?
  • 偏执狂。如果你不测试它并且它是空的,调用 [paths objectAtIndex:0] 会抛出一个异常。虽然在这种特殊情况下它不太可能为空,但有时它会在 Mac 上发生,因为用户可以移动和重命名目录。如果目录不存在,我可能会使用 NSFileManager 的 createDirectoryAtPath:withIntermediateDirectories:attributes:error 方法创建目录。
  • 然后我怎么能把这个 file.txt 放到我的电脑上呢?使用电子邮件?还是有其他更好的选择?
  • 电子邮件是一种选择。 iCloud 或 DropBox 是其他选项。或者可能是 support.apple.com/kb/HT4094 中所述的 iOS 文件共享。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 2015-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
相关资源
最近更新 更多