9

ここで、シナリオの例を説明しました。

「FileA-Database.txt」には次の名前が含まれています。

KB200

KB300

KB400

「FileB-Slave.txt」には次の名前が含まれています。

KB600

KB200

KB400

KB700

「FileA-Database.txt」と「FileB-Slave.txt」を比較し、「FileA-Database.txt」ファイルに不足している値を自動的に入力させたい。また、不足している値をテキストで表示する必要がある「Results.txt」というファイル。

コードはC#(フレームワーク4.0以降)と互換性がある必要があります!。

私は簡単なアプローチが必要です、私のものは私が望むように正確に機能しません:

    private void button_compare_Click(object sender, EventArgs e)
        {
            string fileA, fileB, fileC;
            fileA = "database-critical.txt";
            fileB = "patchlist.txt";
            fileC = "result.txt";

            string alphaFilePath = fileA;

            List<string> alphaFileContent = new List<string>();

            using (FileStream fs = new FileStream(alphaFilePath, FileMode.Open))
            using(StreamReader rdr = new StreamReader(fs))
            {
                while(!rdr.EndOfStream)
                {
                    alphaFileContent.Add(rdr.ReadLine());
                }
            }

            string betaFilePath = fileB;

            StringBuilder sb = new StringBuilder();


            using (FileStream fs = new FileStream(betaFilePath, FileMode.Open))
            using (StreamReader rdr = new StreamReader(fs))
            {
                while(! rdr.EndOfStream)
                {
                    string[] betaFileLine = rdr.ReadLine().Split(Convert.ToChar(","));

                    if (alphaFileContent.Contains(betaFileLine[0]))
                    {
                        sb.AppendLine(String.Format("{0}", betaFileLine[0]));
                    }
                }
            }

using (FileStream fs = new FileStream(fileC, FileMode.Create))
        using (StreamWriter writer = new StreamWriter(fs))
        {
            writer.Write(sb.ToString());
        }
    }

            //End
        }
4

2 に答える 2

30
String directory = @"C:\Whatever\";
String[] linesA = File.ReadAllLines(Path.Combine(directory, "FileA-Database.txt"));
String[] linesB = File.ReadAllLines(Path.Combine(directory, "FileB-Database.txt"));

IEnumerable<String> onlyB = linesB.Except(linesA);

File.WriteAllLines(Path.Combine(directory, "Result.txt"), onlyB);
于 2013-01-17T00:06:57.753 に答える
9

あなたの質問はあなたが何の努力もしなかったように思われるので、私はあなたに大まかな概要を与えるだけです。

  1. File.ReadAllLinesまたはを使用して、両方のファイルを1行ずつ読み取りますFile.ReadLines
  2. LINQのExcept方法を使用します。
  3. 結果を新しいファイルに書き込みます。
于 2013-01-17T00:00:07.413 に答える