-2

.csv ファイルでレポートを生成しています。

以下のコードを使用して、ボタンクリックイベントのコードから .csv ファイルを開いています。

    StreamWriter sw = new StreamWriter(AbsolutePathAndFileName);

        //write header line
        int iColCount = TheDataTable.Columns.Count;
        for (int i = 0; i < iColCount; i++)
        {
            sw.Write(TheDataTable.Columns[i]);
            if (i < iColCount - 1)
            {
                sw.Write(separator);
            }
        }
        sw.Write(sw.NewLine);

        //write rows
        foreach (DataRow dr in TheDataTable.Rows)
        {
            for (int i = 0; i < iColCount; i++)
            {
                if (!Convert.IsDBNull(dr[i]))
                {
                    string data = dr[i].ToString();
                    data = data.Replace("\"", "\\\"").Replace(",", " ");
                    sw.Write(quote + data + quote);
                }
                if (i < iColCount - 1)
                {
                    sw.Write(separator);
                }
            }
            sw.Write(sw.NewLine);
        }
        sw.Close();



 MsgBox db = new MsgBox("Please select below option.", "Message", MessageBoxIcon.Information);
                db.SetButtons("Open Master File", "Save Master File", strBasePath + "\\master.csv");
                db.ShowDialog(this);

このコードは私にとってはうまくいきます。

今、私のファイルはオープンモードになっています。別の基準をフィルタリングしてレポート (.csv ファイル) を再度開くと、ファイルが別のプロセスで使用されているというエラーがスローされます。

どうすればそのエラーを解決できますか?

4

1 に答える 1

0

ChrisWはIs there a way to check if a file is in use?について良い答えを出してい

次のサンプル コードを使用して、ファイルが使用中かどうかを確認できます。

protected virtual bool IsFileLocked(FileInfo file)
{
    FileStream stream = null;

    try
    {
        stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    }
    catch (IOException)
    {
        //the file is unavailable because it is:
        //still being written to
        //or being processed by another thread
        //or does not exist (has already been processed)
        return true;
    }
    finally
    {
        if (stream != null)
            stream.Close();
    }

    //file is not locked
    return false;
}

お役に立てれば。

于 2012-08-17T06:53:33.627 に答える