3

ファイルストリームを使用してファイルを作成していますが、その前に、ファイルが存在するかどうかを確認するためにif条件を適用しています。ボタンをクリックして、ファイルが存在する場合はファイルを削除します。大丈夫です。ボタンを押すとファイルが作成されます。最初はうまくいきます。

これでファイルが作成されました。ボタンを押すと削除されますが、例外が発生します。*別のプロセスによって使用されているため、プロセスはファイル'C:\Hello1'にアクセスできません。*

以下は私のコードです

     private void button2_Click(object sender, EventArgs e)
    {
        string fileName = @"C:\Hello1";
        if

            (File.Exists(fileName))
        {
            File.Delete(fileName);
            MessageBox.Show("File is deleted");
        }
        else
        {
            FileInfo createFile = new FileInfo(fileName);
            FileStream create = createFile.Create();
            MessageBox.Show("Created");

        }
    }

それで、なぜ2回目に削除できないのか、テキストファイルも開いていませんが、それでも例外が表示されています。

4

4 に答える 4

3

ファイルを作成したストリームを閉じることはありません。FileStreamをステートメントに入れるusingと、開いているファイルハンドルが自動的にクリーンアップされます。

using(FileStream create = createFile.Create())
{
    //code here
}
于 2012-11-15T20:30:37.653 に答える
2

2回目の試行でもファイルストリームは開いたままです。次のことを試してください。

private void button2_Click(object sender, EventArgs e)
{
    string fileName = @"C:\Hello1";
    if

        (File.Exists(fileName))
    {
        File.Delete(fileName);
        MessageBox.Show("File is deleted");
    }
    else
    {
        FileInfo createFile = new FileInfo(fileName);
        using(FileStream create = createFile.Create())
        {
            MessageBox.Show("Created");
        }
    }
}
于 2012-11-15T20:34:18.983 に答える
0

そうそう、私は答えを得ました、

使用する必要があります

     private void button2_Click(object sender, EventArgs e)
{
    string fileName = @"C:\Hello1";
    if

        (File.Exists(fileName))
    {
        File.Delete(fileName);
        MessageBox.Show("File is deleted");
    }
    else
    {
        FileInfo createFile = new FileInfo(fileName);
        FileStream create = createFile.Create();
        MessageBox.Show("Created");
        create.Close();

    }
}

create.Close();を使用する必要があります。

于 2012-11-15T20:31:41.930 に答える
0

これは、ローカルログを書き込むために使用した例です。

            StreamWriter log;

            string fpath = string.Format(@"{0}\{1}.txt",GetDirectory(),DateTime.Now.ToString("yyy-MM-dd"));
            if (!File.Exists(fpath))
            {
                log = new StreamWriter(fpath);
            }
            else
            {
                log = File.AppendText(fpath);
            }

            log.WriteLine(string.Format("{0} ==> {1}",DateTime.Now.ToString("MM/dd/yyy HH:mm:ss"), Message));

            log.Dispose();
            log = null;
于 2012-11-15T20:43:40.897 に答える