14

こんにちは、私は何かに取り組んでおり、.txt ファイルにテキストを追加できるようにする必要があります。これは完了しましたが、小さな問題があります。多かれ少なかれ、ファイルの途中に文字列を書き込む必要があります。例:

Hello my name is Brandon,
I hope someone can help, //I want the string under this line.
Thank you.

うまくいけば、誰かが解決策を手伝ってくれるでしょう。

編集わかりましたありがとう、私はそれを理解しようとします.おそらくファイル全体を書き直すだけです. さて、私が作成しているプログラムはホストファイルに関連しており、誰もが同じホストファイルを持っているわけではないので、ホストファイルを読み取り、文字列を追加しながらすべてをコピーする方法があるかどうか疑問に思っていました?

4

6 に答える 6

16

通常のファイルでは、これを回避する方法はありません。追加したい行に続くテキストを読み取り、ファイルを上書きしてから、元の末尾のテキストを追加する必要があります。

ディスク上のファイルを配列と考えてください。いくつかのアイテムを配列の中央に挿入したい場合は、次のすべてのアイテムを下に移動してスペースを空ける必要があります。違いは、.NET には配列用の便利なメソッドが用意されListsているため、これを簡単に実行できることです。私が知る限り、ファイル I/O API にはそのような便利なメソッドはありません。

ファイルの途中に挿入する必要があることが事前にわかっている場合は、多くの場合、コンテンツを変更して新しいファイルを作成し、名前を変更する方が簡単です。ファイルがメモリに読み込むのに十分小さい場合は、LINQ を使用してこれを非常に簡単に行うことができます。

var allLines = File.ReadAllLines( filename ).ToList();
allLines.Insert( insertPos, "This is a new line..." );
File.WriteAllLines( filename, allLines.ToArray() );
于 2010-01-11T19:35:49.877 に答える
4

これは、テキストファイルの途中にテキストを挿入する最良の方法です。

 string[] full_file = File.ReadAllLines("test.txt");
 List<string> l = new List<string>();
 l.AddRange(full_file);
 l.Insert(20, "Inserted String"); 
 File.WriteAllLines("test.txt", l.ToArray());
于 2012-08-31T07:56:50.110 に答える
2

File.ReadAllLines()を確認してください。おそらく最も簡単な方法です。

     string[] full_file = File.ReadAllLines("test.txt");
     List<string> l = new List<string>();
     l.AddRange(full_file);
     l.Insert(20, "Inserted String");
     File.WriteAllLines("test.txt", l.ToArray());
于 2010-01-11T19:36:52.140 に答える
2

トリックの 1 つはファイル トランザクションです。最初に、テキストを追加する行までファイルを読み取りますが、読み取り中に、読み取り行を別のファイル (tmp.txt など) に保存し続けてから、目的のテキストを tmp.txt (ファイルの末尾) に追加します。その後、ソースファイルからの読み取りを最後まで続けます。次に、tmp.txt をソース ファイルに置き換えます。最後に、途中にテキストが追加されたファイルを取得しました:)

于 2010-01-11T19:47:21.747 に答える
0

行インデックスがわかっている場合は、その行に到達してその下に書き込むまで、readLineを使用します。その行のテキストを正確に知っている場合は同じことを行いますが、readLineから返されたテキストを検索しているテキストと比較して、その行の下に書き込みます。

または、指定した文字列のインデックスを検索し、エスケープシーケンスを使用してその後に書き込むことができます\n。

于 2010-01-11T19:44:01.890 に答える
0

他の人が述べたように、単純なテキストファイルに固執する必要がある場合は、新しく挿入されたテキストのポイントの後にファイルを書き換える方法はありません。ただし、要件によっては、書き込みを開始する場所の検索を高速化できる場合があります。行Nの後にデータを追加する必要があることがわかっている場合は、行番号のオフセットの個別の「インデックス」を維持できます。これにより、読み取り/書き込みを開始するために必要な場所を直接探すことができます。

于 2010-01-11T19:45:55.260 に答える