繁体   English   中英

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

[英]Write to file from byte array in c#

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

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

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

谢谢。

尝试关闭或处置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);

文件已被您的应用程序锁定。
考虑使用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);
}

更新:从另一个答案thieved -的using说明。

您正在创建的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器的创建,文件打开和流关闭:

File.WriteAllBytes("c:\\Tmp\\" + a.Name, ((FileAttachment) a).Content);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM