0

現在、テキスト ファイルから特定のテキスト行を削除する必要があるプロジェクトに取り組んでいます。

これは私がすでに持っているコードです:

static void Main( string[] args )
    {
        string line = null;
        string line_to_delete = "--";
        string desktopLocation = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
        string text = Path.Combine( desktopLocation, "tim3.txt" );
        string file = Path.Combine( desktopLocation, "tim4.txt" );

        using (StreamReader reader = new StreamReader( text))
        {
            using (StreamWriter writer = new StreamWriter(file ))
            {
                while((line = reader.ReadLine()) != null)
                {
                    if (string.Compare( line, line_to_delete ) == 0)
                        continue;
                    writer.WriteLine( line );
                }
            }

これにより、テキストのみが新しい txt ファイルに書き込まれますが、何も削除されません。

ありがとう。主な問題は、txt ファイル内の特定のテキスト行を削除するだけでよいことです。

4

3 に答える 3

0

あなたのコメントから、あなたが-で始まる行を削除しようとしていることを理解しています。この場合、if条件を次のように変更する必要があります。

            if (string.Compare( line, line_to_delete ) == 0)
                continue;

に:

            if (line.Trim().IndexOf(line_to_delete) == 0)
                continue;
于 2012-05-16T09:55:42.927 に答える
0

String.comapre が予期しない結果を返す原因となっている先頭/トレーニングスペースが疑われます

それ以外の

 if (string.Compare( line, line_to_delete ) == 0)

試す

if(String.IsNullOrEmpty(line) || String.Equals(line.Trim(), line_to_delete))

上記が機能しないため、次のことを試すことができます(LINQ)

編集- テキストのみを置き換える

File.WriteAllText(file, File.ReadAllText(text).Replace(line_to_delete,"")) 

上記が機能する場合、コード内のすべての using ブロックが置き換えられます

上記が機能しない場合は、データの問題が疑われます (「__」がテキスト ファイルに存在しない)

于 2012-05-16T09:26:41.920 に答える
0

私の知る限り、ファイルの読み取りと書き込みを同時に行うことはできません (ファイルのロック)。あなたができることは、適切なデータをtim4.txtに書き込んで(例のように)、完了したら、tim3.txtを削除し、tim4.txtの名前をtim3.txtに変更することです。

編集:あなたの質問を誤って解釈しました。変更を同じファイルに書き込めないと思っていましたが、テキストはフィルタリングされていません。ティランの提案を試してみてください

于 2012-05-16T09:28:29.853 に答える