今回のテーマ
今回は既に内容が書き込まれているファイルに対し、指定した行に文字列を挿入する方法を解説します。
ファイルを読み込むためのメソッドと書き込むためのメソッドを一緒に使います。
この記事では、下記の行に書き込むソースコードを書いていきます。
・1行目に書き込む方法
・n行目に書き込む方法
・1番最後の行に書き込む方法
それでは、やっていきましょう。
今回使用するファイルの内容
今回は「D:\Example」に下記の内容のファイルを置きました。
Robot.txt
Rockman
Rollchan
Fireman
Iceman
このファイルに対して内容を挿入していきましょう!!
1行目に挿入する方法
早速ソースコードを書いていきます。1行目に「Quickman」、2行目に「Bubbleman」を挿入してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using System.IO; class Program { static void Main(string[] args) { var filePath = @"D:\Example\Robot.txt"; using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)) { using(var reader = new StreamReader(stream)) using(var writer = new StreamWriter(stream)) { string texts = reader.ReadToEnd(); stream.Position = 0; writer.WriteLine("Quickman"); writer.WriteLine("Bubbleman"); writer.Write(texts); } } } } |
テキストの内容
Quickman
Bubbleman
Rockman
Rollchan
Fireman
Iceman
処理を1つずつ解説していきます。
step
1FileStreamクラスを使用して、テキストファイルをオープンし、StreamReaderとStreamWriterのオブジェクトを生成します。各引数は下記となっています。
・第1引数:ファイルのパス
・第2引数:既存ファイルを開く
・第3引数:読み込みと書き込みを両方行えるようにする。
・第4引数:他からのアクセスを拒否
step
2ReadToEndメソッドでtexts引数に保持
step
3Positionプロパティで最初の位置に戻し、挿入したい内容を書き込む
step
4保持した内容(texts引数)を書き込む
上記の処理によって、実現しています。続けて、n番目に挿入する方法を紹介します。
n番目に挿入する方法
この記事を見ている方はn行目に挿入する方法を知りたい方が一番多いと思います。
私も色々とやり方を考えていたのですが、下記の方法が一番しっくりときました。ソースコードを書いていきます。
下記の例では、4行目に「Quickman」と「Bubbleman」を挿入する例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System.IO; using System.Linq; class Program { static void Main(string[] args) { var insertnumber = 3; var arrrobot = new string[]{"Quickman", "Bubbleman"}; var filePath = @"D:\Example\Robot.txt"; var filePath2 = @"D:\Example\Robot2.txt"; var lines = File.ReadLines(filePath); var skiplines = lines.Skip(insertnumber); var writelines = lines.Take(insertnumber).Union(arrrobot).Union(skiplines); File.WriteAllLines(filePath2,writelines); } } |
Robot2.txt
Rockman
Rollchan
Fireman
Quickman
Bubbleman
Iceman
4行目に挿入することが出来ました。ReadLinesメソッドを使用する方法です。ReadLinesメソッドに関しては、下記の記事も参考になります。
こちらもCHECK
-
C# Linq ファイルの書き込み方法を紹介 Linqの抽出結果を書き込むことも可能です。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
本当は元々のファイルに対して、書き込みたかったのですが、読み込みのアクセスのプロセスを削除することが出来ずに断念しました。
上記のソースコードに対して、処理の説明をしていきます。
step
1File.ReadLinesメソッドを使用して、全てのテキストの内容を読み込む。
step
2Skipメソッドを使用することで指定した行数より後ろの内容を保持する。
step
3Takeメソッドで指定した行数より前の内容を取り出す。
step
43で取り出した内容に挿入したい文字列を追加し、その後に2で保持した内容を追加する。
step
54で作成した配列をWriteAllLinesメソッドによって一気に書き込む。
このやり方はReadLinesメソッドを使用しているので、処理も早く、メモリの圧迫する心配がないのが強みです。
また、Linqを自由に扱うことができるので、自由自在に内容を変更することが出来ます。
1番初めに挿入する方法も0を指定すると出来てしまいます。元のテキストに書き込めない以外はとても万能です。
誰かFileクラスを使用した時のメモリ解放の方法教えてください!!
TakeメソッドとSkipメソッドについては下記の記事を参考にしてください。
こちらもCHECK
-
【C# sharp Linq】Take、Skip、TakeWhile、SkipWhileメソッドを解説します。
ChatGPTのAPIを使わずに自動化することが可能です。 下記の本を読めば、ChatGPT4でも料金掛からずに自動化できます!KindleUnlimited会員であれば無料で読めます。 今回のテーマ ...
続きを見る
一番最後の行に挿入する方法
正直書かなくてもいいかなーって思いましたが、一応書いておきますね。
下記のようにStreamWriterを使用するのが一般的だと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.IO; class Program { static void Main(string[] args) { var arrrobot = new string[]{"Quickman", "Bubbleman"}; var filePath = @"D:\Example\Robot.txt"; using (var stream = new StreamWriter(filePath,append:true)) { stream.WriteLine(""); stream.WriteLine("Quickman"); stream.WriteLine("Bubbleman"); } } } |
Robot.txt
Rockman
Rollchan
Fireman
Iceman
Quickman
Bubbleman
気を付けないといけない所はStreamWriterの第2引数をtrueにすることですね。
falseにすると、全ての内容を上書きして書き込みます。下記のようになるので、気を付けましょう。
Robot.txt
Quickman
Bubbleman
まとめ
今回の記事では、ファイルの内容の挿入方法について書いていきました。
今回のやり方が必ずしも正しいとは限らないので、
今回実装する処理でしっくりきた場合はぜひ紹介した方法を使ってください。
少しでもお役に立てたのであれば幸いです。