【问题标题】:How to insert data to text file with using NSFileHandle如何使用 NSFileHandle 将数据插入文本文件
【发布时间】:2013-08-07 17:39:18
【问题描述】:

我的代码替换文本而不是从 5 符号开始插入:

NSFileHandle *file = [NSFileHandle fileHandleForUpdatingAtPath: filePath];
[file seekToFileOffset: 5];

[file writeData: [value dataUsingEncoding:NSUTF8StringEncoding]];

有没有办法将数据插入文本文件?

【问题讨论】:

标签: ios objective-c nsfilehandle


【解决方案1】:

那是因为您的代码设置了索引position to 5 并从那里开始写入,从而替换了从5 开始的所有内容。

我会将文件的内容复制到一个变量中,然后将其修改为string。 正如你试图做的那样is not possible

更新: 鉴于您需要从 X 偏移量写入,这应该可以解决问题

   NSFileHandle *file;
        NSMutableData *data;

        const char *bytestring = "black dog";

        data = [NSMutableData dataWithBytes:bytestring length:strlen(bytestring)];


        file = [NSFileHandle fileHandleForUpdatingAtPath: @"/tmp/quickfox.txt"];

        if (file == nil)
                NSLog(@"Failed to open file");


        [file seekToFileOffset: 10];

        [file writeData: data];

        [file closeFile];

【讨论】:

  • 谢谢,我知道。问题是如何从位置 5 insert 测试,(而不是 replace
【解决方案2】:

这可能不是一种有效的方法,但您可以将整个文本文件读入 NSMutableString,然后使用 insertString:atIndex:,然后将其写回。据我所知,没有办法将文本插入现有文件。 Similar question

一个简单的例子:

NSString *path = //Your file
NSMutableString *contents = [NSMutableString stringWithContentsOfFile:txtFilePath encoding:NSUTF8StringEncoding error:NULL];

[contents insertString:@"Some string to insert" atIndex:5];
[contents writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:NULL];

【讨论】:

    【解决方案3】:

    在顺序文件的某处插入数据需要重写整个文件。但是,可以在不重写文件的情况下将数据添加到文件末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-22
      相关资源
      最近更新 更多