表題の通りなのですがlogファイルの中身を逆の順番で読み取ろうとしています。
いくつか試してみたのですがうまく再現できなかった為、お知恵をお借り出来たらと思います。
・試してみたこと
sr.ReadLineを⇒sr.ReadLine().reverseに
↓
System.Linq.Enumerable+ReverseIterator`1[System.Char]と表示されるだけ
sr.Peek()をsr.Peek().reverse()
↓
エラー
リストに一度すべて格納してreverse?そのほかに逆順でループ等々ありそうなのですが
どれが最適解かいまいちわかりません。
お手数おかけしますがご教示いただけますと幸いです。
C#
1 private void Line_read() 2 { 3 4 try 5 { 6 string Path = @"C:\Users\user\Documents\test.log"; 7 using (FileStream fs = new FileStream(Path, 8 FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 9 { 10 11 using (TextReader sr = new StreamReader(fs, 12 Encoding.GetEncoding("UTF-8"))) 13 { 14 String line; 15 // Read and display lines from the file until the end of 16 // the file is reached. 17 while (sr.Peek() > -1) 18 { 19 //※逆順で一行読み込んで表示する 20 Debug.WriteLine(sr.ReadLine()); 21 } 22 23 sr.Close(); 24 25 26 } 27 } 28 } 29 catch (Exception e) 30 { 31 // Let the user know what went wrong. 32 Debug.WriteLine("The file could not be read:"); 33 Console.WriteLine(e.Message); 34 } 35 }
追記:
記載漏れがありました。すみません。
逆順で1行ずつ回しながらその行の検索を行う、という処理を挟むまでが全容なのですが
リストにすべて格納するというと、全体を通常の順序で配列に取り込み⇒reverseして
配列を逆に、という形になると思います。
当然そこまでは思いつくのですが、そうなると
一度配列に入れる正順ループを行った後、リバースして
さらにループと、2回ループするようで不格好かと思います。
1度のループで配列に取り込まず最初から
逆順に読み込もうとして方法がうまく思いつかない、という旨の質問となります。
コメント頂いた方々には申し訳ありません。
もしよろしければ再度ご教示いただけますと幸いです。
(2度ループするしか方法がないというのであればそれはそれで構いません)
不勉強かつ言葉足らずでで申し訳ない限りです。
回答1件
あなたの回答
tips
プレビュー