The file is being used by another process, I must close it? How?

随声附和 提交于 2019-12-02 05:01:01

问题


I am using a text file to have some data there for later purposes. So what I do is to check if file exists, if not I am creating a new file when I need. This gives me error saying that my file is still being used by a different process, but I'm not sure why that is.

This is how I do it. Here, I am checking if file exists which starts when program runs:

    private void CreateLastOpenFile()
    {
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }

        if (!File.Exists(file))
        {
            File.Create(file);
        }
    }

Now, I am adding some data to it while checking or creating a new file (I am having this in 2 places in my program):

CreateLastOpenFile();
File.WriteAllText(file, data);

What could be wrong here? I have read some examples from the Net, but didn't see anything about closing any files.


回答1:


Try this. This will close the opened stream during file creation

 if (!File.Exists(file))
        {
         FileStream str = File.Create(file);
         str.Close();
        }



回答2:


File.Create is creating a FileStream that locks the file. You should close it. Actually, you don't even need to create a file. File.WriteAlltext will do it for you




回答3:


I recommend you to create and fill with data the file in one step, using some class like StreamWriter that allows you to dispose the class, you should not have problem doing it this way, here is an example:

StreamWriter Swr = new StreamWriter(FilePath); 
Swr.Write(Data);          
Swr.Close(); 
Swr.Dispose();

//Doing the close and Dispose you get sure the file is not locked anymore

You can also use File.WriteAllText(string Path, string Data), this method does not lock the file.




回答4:


You are not closing the stream handle that File.Create() returns.

Suggest you do not use File.Create() in your case. You can just use File.WriteAllText(file, data); - according to MSDN documentation it creates the file if it doesn't exist or overwrites the contents when file exists. After that closes the file stream.




回答5:


If you are using below method to write the data into text file, you dont need to check if file exists and if not create it. "WriteAllText" takes cares of all these things by itself. It will create the file if not exists, write the data and close it, or overwrite the file if already exists. File.WriteAllText(file, data);



来源:https://stackoverflow.com/questions/8698879/the-file-is-being-used-by-another-process-i-must-close-it-how

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!