2

Visual Studio 2008 を使用して、リリース用のデータベース スクリプトをマージする C# ユーティリティを作成しています。

コードは次のようになります

strPath = txtInputFolder.Text;

DirectoryInfo di = new DirectoryInfo(strPath);
FileInfo[] lstFile = di.GetFiles("*.sql");

string strScriptPath = System.IO.Path.Combine(strPath, lblOutput.Text);
FileStream foutput = System.IO.File.Create(strScriptPath);
BinaryWriter writer = new BinaryWriter(foutput, Encoding.UTF8);

string strLine;
foreach (FileInfo fi in lstFile)
{
   strLine = string.Empty;

   strLine = "\r\n\r\n/*--------- " + fi.Name + " -------------*/" + "\r\n\r\n";
   writer.Write(strLine);

   //some processing
}

foutput.Close();
MessageBox.Show("Done");

このコードは正常に実行され、必要に応じて script.sql ファイルが作成されます。しかし、ランダムな文字で

      =

      /*--------- script1.sql -------------*/

      A

      /*--------- script2.sql -------------*/

      I

      /*--------- script3.sql -------------*/

      H

これは一貫した問題であり、何が問題なのかわかりません。

4

1 に答える 1

4

なぜBinaryWriterを使用しているのですか? その名前が示すように、これはテキスト ファイルではなく、バイナリ ファイルを書き込むためのものです。代わりにStreamWriterを使用してください。IDisposableまた、リソースをusingステートメントでラップしていることを確認してください。

strPath = txtInputFolder.Text;
DirectoryInfo di = new DirectoryInfo(strPath);
FileInfo[] lstFile = di.GetFiles("*.sql");

string strScriptPath = System.IO.Path.Combine(strPath, lblOutput.Text);
using (FileStream foutput = System.IO.File.Create(strScriptPath))
using (StreamWriter writer = new StreamWriter(foutput, Encoding.UTF8))
{

    string strLine;
    foreach (FileInfo fi in lstFile)
    {
        strLine = string.Empty;

        strLine = "\r\n\r\n/*--------- " + fi.Name + " -------------*/" + "\r\n\r\n";
        writer.Write(strLine);
        //some processing
    }
}
MessageBox.Show("Done");

または、LINQ を使用してコードを簡素化します。

string strPath = txtInputFolder.Text;
DirectoryInfo di = new DirectoryInfo(strPath);
FileInfo[] lstFile = di.GetFiles("*.sql");

string strScriptPath = Path.Combine(strPath, lblOutput.Text);

File.WriteAllLines(
    strScriptPath, 
    lstFile.Select(
        fi => string.Format(
            "\r\n\r\n/*--------- {0} -------------*/\r\n\r\n{1}", 
            fi.Name, 
            File.ReadAllText(fi.FullName)
        )
    ),
    Encoding.UTF8
);

MessageBox.Show("Done");
于 2012-06-13T07:03:59.887 に答える