我正在尝试将内存中的字节数组内容写入文件。这是我做的:
var bw = new BinaryWriter(File.Open("c:\\Tmp\\" + a.Name, FileMode.OpenOrCreate));
bw.Write(((FileAttachment)a).Content);
但是我发现在某些情况下我无法在“文件资源管理器”中手动打开文件,直到我杀死编写该文件的C#。你能告诉我那是什么吗?
谢谢。
答案 0 :(得分:3)
尝试关闭或处理BinaryWriter,例如
using (var bw = new BinaryWriter(File.Open("c:\\Tmp\\" + a.Name, FileMode.OpenOrCreate)))
{
bw.Write(((FileAttachment)a).Content);
}
此外,您可能希望从现在开始使用Path.Combine()
(它会关注反斜杠)并使用@来使目录名可读:
Path.Combine(@"c:\Tmp\", a.Name);
答案 1 :(得分:1)
您的申请已锁定文件
请考虑使用File.Open
方法重新加载FileShare
方法,以便设置using (var bw = new BinaryWriter(File.Open("c:\\Tmp\\" + a.Name, FileMode.OpenOrCreate,
FileAccess.Write, FileShare.Read))
{
bw.Write(((FileAttachment)a).Content);
}
模式。
using
更新:从另一个答案中窃听 - {{1}}声明。
答案 2 :(得分:1)
您正在创建的BinaryWriter正在锁定文件。只要您的程序正在运行,该文件就会保持锁定状态,因为您没有将其丢弃。
为此,您可以在每次使用后手动处理它:
var bw = new BinaryWriter(File.Open("c:\\Tmp\\" + a.Name, FileMode.OpenOrCreate));
bw.Write(((FileAttachment)a).Content);
bw.Close();
使用Using
语句自动关闭流:
using (BinaryWriter bw = new BinaryWriter(File.Open("c:\\Tmp\\" + a.Name, FileMode.OpenOrCreate)))
{
bw.Write(((FileAttachment) a).Content);
}
甚至更好,使用File.WriteAllBytes
以简洁的方式处理作者创建,文件打开和流关闭:
File.WriteAllBytes("c:\\Tmp\\" + a.Name, ((FileAttachment) a).Content);