从c#中的字节数组写入文件

时间:2014-09-25 21:05:27

标签: c#

我正在尝试将内存中的字节数组内容写入文件。这是我做的:

   var bw = new BinaryWriter(File.Open("c:\\Tmp\\" + a.Name, FileMode.OpenOrCreate));
   bw.Write(((FileAttachment)a).Content);

但是我发现在某些情况下我无法在“文件资源管理器”中手动打开文件,直到我杀死编写该文件的C#。你能告诉我那是什么吗?

谢谢。

3 个答案:

答案 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);