从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#。你能告诉我那是什么吗?

谢谢。

从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);