我知道File.Open()
内部调用了new FileStream()
。那么为什么使用File.Open()
的代码会抛出IOException
并显示错误消息:
该进程无法访问该文件,因为该文件正由另一个进程
使用
使用FileStream()
的代码不会导致此错误。
for (int i = 0; i < 20000; i++)
{
XmlSerializer x1 = new XmlSerializer(typeof(Tasks));
using (FileStream fileStream = File.Open(
Settings.Default.DownloadJobFileName,
FileMode.Open,
FileAccess.Read))
{
tasks = ((Tasks)xmlSerializer.Deserialize(fileStream));
}
XmlSerializer x2 = new XmlSerializer(typeof(Tasks));
using (FileStream fileStream = File.Open(
Settings.Default.DownloadJobFileName,
FileMode.Create,
FileAccess.Write))
{
xmlSerializer.Serialize(fileStream, tasks);
}
}
我使用Windows 8.1和.Net 4.0客户端配置文件,似乎在Windows Embedded Standard 2009上的情况越来越糟
答案 0 :(得分:2)
您使用的构造函数/方法的FileShare
选项不同:
public FileStream(String path, FileMode mode, FileAccess access)
: this(path, mode, access, FileShare.Read,
DefaultBufferSize, FileOptions.None, Path.GetFileName(path), false) {
}
与
相比public static FileStream Open(String path, FileMode mode, FileAccess access) {
return Open(path,mode, access, FileShare.None);
}
public static FileStream Open(String path, FileMode mode, FileAccess access, FileShare share) {
return new FileStream(path, mode, access, share);
}
当您创建新的FileStream
时,其他进程仍然可以读取该文件。另一方面,File.Open
锁定文件,以便其他进程无法访问它。