c# |进程无法访问该文件,因为它正在被另一个进程使用,即使在关闭二进制写入器和读取器之后

本文关键字:进程 之后 读取 二进制 访问 文件 因为 另一个 | 更新日期: 2023-09-27 18:03:15

我大约3天前开始学习c#,之前我对Java有一些了解。

这三天我一直在做一个程序,主要是为了掌握c#的窍门,这样我就可以学习了,等等。

在这个程序中,只是简单地更改文件中的几个字节,但这不是重点。关键是,我让所有这些都工作了,加载字节并将字节写入文件工作得很好,除了…在我改变字节后关闭程序后,我再次打开它,我可以加载它们,但是当我试图保存时,我得到这个错误。进程无法访问文件'(文件)',因为它正在被另一个进程使用。

我绝对肯定它没有被用于其他东西,因为我打开的唯一东西是Opera, Visual Studio和正在调试的程序。如果有帮助,这里是重要的部分(我知道,代码很糟糕,但我是新手…):

阅读/显示:

choose = Names.Items.IndexOf(Names.SelectedItem);
BinaryReader br = new BinaryReader(File.OpenRead(ofd.FileName));
br.BaseStream.Seek(BaseStats + (28 * choose), SeekOrigin.Begin);
HPtb.Text = br.ReadBytes(1)[0].ToString();
br.BaseStream.Seek(BaseStats + (28 * choose) + 1, SeekOrigin.Begin);
Attb.Text = br.ReadBytes(1)[0].ToString();
br.BaseStream.Seek(BaseStats + (28 * choose) + 2, SeekOrigin.Begin);
Deftb.Text = br.ReadBytes(1)[0].ToString();
br.BaseStream.Seek(BaseStats + (28 * choose) + 3, SeekOrigin.Begin);
Sptb.Text = br.ReadBytes(1)[0].ToString();
br.BaseStream.Seek(BaseStats + (28 * choose) + 4, SeekOrigin.Begin);
SpAtb.Text = br.ReadBytes(1)[0].ToString();
br.BaseStream.Seek(BaseStats + (28 * choose) + 5, SeekOrigin.Begin);
SpDtb.Text = br.ReadBytes(1)[0].ToString();
br.Close();
写作:

Names.Items.IndexOf(Names.SelectedItem);
BinaryWriter black = new BinaryWriter(File.OpenWrite(ofd.FileName));
black.BaseStream.Position = BaseStats + (choose  * 0x1C);
String[] statbox = new String[] { HPtb.Text, Attb.Text, Deftb.Text, Sptb.Text, SpAtb.Text, SpDtb.Text };
foreach (String element in statbox)
{
    black.Write((byte)int.Parse(element));
}
black.Close();

我得到错误的确切行是:

BinaryWriter black = new BinaryWriter(File.OpenWrite(ofd.FileName));

编辑:整个程序:http://pastebin.com/MaVULd5q(必须分开才能发布)

与此相关的行是:119、132、148和156

c# |进程无法访问该文件,因为它正在被另一个进程使用,即使在关闭二进制写入器和读取器之后

检查使用语句访问文件

using (FileStream fs = File.OpenRead(path)) 
{
    var br = new BinaryReader(fs);
    br.BaseStream.Seek(BaseStats + (28 * choose), SeekOrigin.Begin);
    HPtb.Text = br.ReadBytes(1)[0].ToString();
    br.Close();
}

您将希望该文件流被处理掉。这是一种清晰、简单的方法,可以帮助确保。