[英]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.