1

data.txtというテキストファイル(リソースフォルダー内)の先頭にある現在のデータを上書きしたいと思います。常に1行だけ(スペースなどはありません)であり、必要に応じてこの行を上書きしたいと思います。これは私がこれまで行ってきた方法ですが、これはファイルの最後にコンテンツを書き込むだけで、最初から開始するのではなく、必要な行を上書きします。誰かが私を助けることができればそれはありがたいです。ありがとう!

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0];

//append filename to docs directory
NSString *myPath =  [documentsDirectory stringByAppendingPathComponent:@"data.txt"];
fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:myPath];

writtenString= [[NSString alloc]initWithFormat:@"%d", message];     

[fileHandle seekToEndOfFile];
[fileHandle writeData:[writtenString dataUsingEncoding:NSUTF8StringEncoding]];

[writtenString release];
4

2 に答える 2

2

マイクの答えは、ファイルの内容を上書きすることを可能にしますが、あなたが想像しているような行指向の方法ではありません。

ファイルの内部内容を調整することはできません。挿入すると既存の次のデータが後でプッシュされ、削除すると既存の次のデータがプルアップされて削除ポイントの直後に表示されます。

2つの基本的な操作を使用できます。特定の長さ(場合によっては0)でファイルを切り捨て、その時点を過ぎた古いデータを破棄できます。また、特定の位置にデータを書き込むことができます。その位置にすでにデータがあった場合、そのデータは上書きされます(つまり失われます)。書き込んでいるバイト範囲がファイルの終わりを超えて拡張されている場合、ファイルは拡張されます。

ただし、切り捨ても上書きもしなかった古いデータは、元の場所に残ります。いかなる場合でも移動されません。

したがって、テキストファイルの最初の行を変更したい場合で、新しい行が古い行とまったく同じ長さであるかどうかわからない場合は、2番目の行からすべてを移動する必要があります。新しい場所に移動します。小さなファイルに適した簡単なアプローチの1つは、すべてをメモリに読み込み、そこで調整して、すべてを再度書き出すことです。もう1つは、ファイルを繰り返し処理し、チャンクを読み込んでから、新しい場所に書き出すことです。データを最初に移動する場合は、最初から開始します。データを最後に移動する場合は、最後から開始します。

于 2012-05-12T03:52:38.293 に答える
1

これは私がこれまで行ってきた方法ですが、これはファイルの最後にコンテンツを書き込むだけで、最初から開始するのではなく、必要な行を上書きします。

ええ、ええ、あなたが呼ぶので:

[fileHandle seekToEndOfFile];

そしてそれはあなたが求めたことをやっています。試す:

[fileHandle seekToFileOffset: 0];
于 2012-05-12T03:09:29.190 に答える