当我尝试创建文件然后写入文件时,我收到错误The process cannot access the file 'C:\Users\Ryan\Desktop\New folder\POSData.txt' because it is being used by another process.
。什么进程正在使用该文件?我在创建文件后检查了file.close,但它不存在。我如何通过这个?谢谢!
继承我的代码:
MessageBox.Show("Please select a folder to save your database to.");
this.folderBrowserDialog1.RootFolder = System.Environment.SpecialFolder.Desktop;
DialogResult result = this.folderBrowserDialog1.ShowDialog();
if (result == DialogResult.OK)
{
databasePath = folderBrowserDialog1.SelectedPath;
if (!File.Exists(databasePath + "\\POSData.txt"))
{
File.Create(databasePath + "\\POSData.txt");
}
using (StreamWriter w = new StreamWriter(databasePath + "\\POSData.txt", false))
{
w.WriteLine(stockCount);
}
}
编辑:仅在创建文件时发生。如果它已经存在,则不会发生错误。
答案 0 :(得分:2)
实际上,甚至不用使用File.Create
。您收到该错误的原因是File.Create
正在该文本文件上打开一个流。
string filePath = "databasePath + "\\POSData.txt"";
using (StreamWriter sw = new StreamWriter(filePath, true))
{
//write to the file
}
答案 1 :(得分:0)
File.Create
返回可能需要关闭的FileStream
对象。
此方法创建的FileStream对象具有默认的FileShare 无价值;没有其他进程或代码可以访问创建的文件 直到原始文件句柄关闭。
using (FileStream fs = File.Create(databasePath + "\\POSData.txt"))
{
fs.Write(uniEncoding.GetBytes(stockCount), 0, uniEncoding.GetByteCount(stockCount));
}
答案 2 :(得分:0)
您在致电File.Create
时保持文件处于打开状态(即您永远不会关闭该文件)。
StreamWriter
会为您创建文件(如果它不存在),所以我不打算自己检查。您可以删除检查其是否存在的代码,如果不存在则创建它。
if (result == DialogResult.OK)
{
databasePath = folderBrowserDialog1.SelectedPath;
using (StreamWriter w = new StreamWriter(databasePath + "\\POSData.txt", false))
{
w.WriteLine(stockCount);
}
}
请注意,如果该文件不存在,则忽略bool
构造函数中的第二个StreamWriter
参数。
答案 3 :(得分:0)
File.Create还会打开文件进行读/写。因此,当您使用File.Create时,您将离开一个打开的FileStream。
假设覆盖是可以的,那么你可能想要做这样的事情:
using (var fs = File.Create(databasePath + "\\POSData.txt"))
using (StreamWriter w = new StreamWriter(fs))
{
w.WriteLine(stockCount);
}
给出File.Create:
创建或覆盖指定路径中的文件。
答案 4 :(得分:0)
我用了它,而且效果很好
`File.AppendAllText(fileName,"");`
这将创建一个新文件,不写入任何内容,然后为您关闭该文件。