0

私のコードは、ファイルが既に使用されているという実行時エラーを出しています。これを回避する方法がわかりません。ユーザーとやり取りするにはファイルダイアログが必要ですが、1行ずつ読みたいです。ファイルはセミコロンで区切られており、手動で解析してシステムにフィードします。opendialog からファイルを解放して作業できるようにするにはどうすればよいですか。事前に感謝します。

List<string> datalinestream = new List<string>();
FileDialog FD = new System.Windows.Forms.OpenFileDialog();

if (FD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{


    TextReader reader = new StreamReader(FD.FileName);
    using (reader)
    {
        string line = "";
        while ((line = reader.ReadLine()) != null)
        {

            while (!string.Equals(reader.Read(),"/r"))
            {
                datalinestream.Add(GetWord(reader));
            }
            LuceneDB.AddUpdateLuceneIndex(new MATS_Doc( datalinestream));
            datalinestream.Clear();
        }


    }
}
4

2 に答える 2

1

FileOpenDialogインタラクションを解析から切り離すことをお勧めします。

このようなもの:

List<string> datalinestream = new List<string>();
string fileName;

using(FileDialog FD = new System.Windows.Forms.OpenFileDialog())
{
    if(FD.ShowDialog() == DialogResult.OK)
        fileName = FD.FileName;
    else
        return;
}

TextReader reader = new StreamReader(fileName);
using (reader)
{
    string line = "";
    while ((line = reader.ReadLine()) != null)
    {

        while (reader.Read() != '\r')
        {
            datalinestream.Add(GetWord(reader));
        }
        LuceneDB.AddUpdateLuceneIndex(new MATS_Doc( datalinestream));
        datalinestream.Clear();
    }
}

また、 と の 2 つの文字を含む文字列の代わりに、\r文字をチェックしたいと仮定しています。/rStreamReader.Read()

于 2013-03-12T19:04:33.253 に答える
1

元のテキスト ファイルと同じ情報を含む一時ファイルを作成します。再度問題が発生しないように、ファイル名を GUID などでフォーマットするようにします。私のコードは、一時ファイルですべての作業を行います。

その後、(必要に応じて) 一時ファイルに加えた変更で元のファイルを更新します。

ファイルの操作は頭痛の種になる場合がありますが、回避策やシステムのトリックで問題は解決します。

于 2013-03-12T19:02:50.973 に答える