C# exception. File is being used by another process

前端 未结 7 1742
北恋
北恋 2020-12-19 06:43

I\'m playing around with C# and I encountered a problem. When I try to make a new file, the program breaks and says that the file is being used by another process. It\'s pro

相关标签:
7条回答
  • 2020-12-19 06:47

    I see 2 ways: 1)use System.IO.File.WriteAllText http://msdn.microsoft.com/en-us/library/vstudio/8bh11f1k.aspx 2)read about disposing http://msdn.microsoft.com/en-us/library/system.idisposable.aspx

    0 讨论(0)
  • 2020-12-19 06:48

    Use

    myDropDown_invokedMethod();
    

    instead of

    this.BeginInvoke(new MethodInvoker(myDropDown_invokedMethod));
    
    0 讨论(0)
  • 2020-12-19 06:51

    Thats because the File.Create(NameTb.Text + ".txt"); keeps the file open:

    try use this instead:

        private void SaveBtn_Click(object sender, EventArgs e)
        {
            using(Stream stream = File.Create(NameTb.Text + ".txt"))
            {
                TextWriter tw = new StreamWriter(stream); /* this is where the problem was */
                tw.WriteLine("The very first line!");
                tw.Close();
            }
        }
    

    This wil force the File.Create to be Disposed when the method has exits. The dispose will close the filehandle (win32 unmanaged handle). Otherwise the file will be closed by the garbage collector, but you never know when.

    0 讨论(0)
  • 2020-12-19 06:53

    File.Create returns a FileStream object which holds your file. You should use this object for further task.

    var fileStream = File.Create(NameTb.Text + ".txt");
    //... do all the writing using fileStream
    fileStream.Close();
    

    or you could do just

    var fs = File.Create(NameTb.Text + ".txt");
    fs.Close();
    TextWriter tw = new StreamWriter(NameTb.Text + ".txt"); 
    tw.WriteLine("The very first line!");
    tw.Close();
    
    0 讨论(0)
  • 2020-12-19 06:53

    Your problem seems to be in SaveBtn_Click event, you are using your destination file twice for writing:

    File.Create(NameTb.Text + ".txt");
    TextWriter tw = new StreamWriter(NameTb.Text + ".txt"); 
    

    Remove this line:

    File.Create(NameTb.Text + ".txt");
    
    0 讨论(0)
  • 2020-12-19 07:05

    Your problem is that File.Create will open a stream allowing you to do what you like to the file:

    http://msdn.microsoft.com/en-us/library/d62kzs03.aspx

    A FileStream that provides read/write access to the file specified in path.

    Therefore, technically, it is in use already.

    Just remove the File.Create altogether. The StreamWriter will handle creating the file if it doesn't exist.

    Also, invest in using constructs to properly dispose of your file connections too. Will help avoid this in the future.

    0 讨论(0)
提交回复
热议问题