从c#中的字节数组写入文件
本文关键字:数组 文件 字节数 字节 | 更新日期: 2023-09-27 18:24:26
我正在尝试将内存中的字节数组内容写入文件。以下是我所做的:
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);
}
更新:窃取了另一个答案——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("c:''Tmp''" + a.Name, ((FileAttachment) a).Content);