2011-08-10 7 views
8

C#でテキストファイルの最初の行を削除しますか?は、私が現在使用して、テキストファイルの最後の行を削除することができ

あなたの代わりに、同様 lines.Skip使用することができます
+0

あなたが探している答えではないかもしれませんが、最初の行を表すバイトをNULLに置き換えるのはどうでしょうか?次回にFile.ReadAllLinesを実行すると、最初のNULLバイトをすべてスキップします – Polity

答えて

8

代わりのlines.Take:使用される技術は、(すべてのテキストを読み、バック、すべてを書き)非常に非効率的であるという事実にもかかわらず、最初に切り捨てること

var lines = File.ReadAllLines("test.txt"); 
File.WriteAllLines("test.txt", lines.Skip(1).ToArray()); 

を。

効率的な方法について:ファイル全体をメモリに読み込む必要があるため、非効率的です。もう1つの方法は、ストリームを探して別の出力ファイルにコピーし、元のファイルを削除し、古いファイルの名前を変更することです。それは同じ速さでありながら、はるかに少ないメモリを消費します。

最後にファイルを切り捨てる方がはるかに簡単です。あなたはトランクアクション位置を見つけることができ、FileStream.SetLength()と呼ぶことができます。

+1

これは非効率的ですが、ファイルの先頭を切り捨てる方法はありますか? –

+0

はい、私の答えに記載されているように書くだけです。 –

+2

@ssg:書き込み部分を省略すると、ファイルはどのように更新されますか?私は何かが欠けていると仮定します... – Chris

4
var lines = System.IO.File.ReadAllLines("test.txt"); 
System.IO.File.WriteAllLines("test.txt", lines.Skip(1).ToArray()); 

Skipは、シーケンスのを開始から指定の要素数分を排除します。 Takeは、シーケンスのエンドから指定された数の要素を除くすべての要素を削除します。あなたがIEnumerable<string>を必要とし、あなたがこのような何かを行うことができ、メモリを無駄にしたくない場合は

 using (var stream = File.OpenRead("C:\\yourfile")) 
     { 
      var items = new LinkedList<string>(); 
      using (var reader = new StreamReader(stream)) 
      { 
       reader.ReadLine(); // skip one line 
       string line; 
       while ((line = reader.ReadLine()) != null) 
       { 
        //it's far better to do the actual processing here 
        items.AddLast(line); 
       } 
      } 
     } 

更新

public static IEnumerable<string> GetFileLines(string filename) 
    { 
     using (var stream = File.OpenRead(filename)) 
     { 
      using (var reader = new StreamReader(stream)) 
      { 
       reader.ReadLine(); // skip one line 
       string line; 
       while ((line = reader.ReadLine()) != null) 
       { 
        yield return line; 
       } 
      } 
     } 
    } 


    static void Main(string[] args) 
    { 
     foreach (var line in GetFileLines("C:\\yourfile.txt")) 
     { 
      // do something with the line here. 
     } 
    } 
4

は、代替ですテキストファイルから第1行を削除するには

System.IO.StreamReader file = new System.IO.StreamReader(filePath); 
string data = file.ReadToEnd(); 
file.Close(); 
data = Regex.Replace(data, "<.*\n", ""); 
System.IO.StreamWriter file = new System.IO.StreamWriter(filePath, false); 
file.Write(data); 
file.Close(); 
+1

行がない場合はどうなりますか? 'ReadLine'は両方の呼び出しでnullを返すので、 – Deleted

+1

は何もありません。 – jgauffin

+0

Clever。完璧な意味合いを持つ。 – Deleted

0

ここ

+1

Regexはこのシナリオでは本当に不幸です – mike

関連する問題