【发布时间】:2018-11-05 16:19:49
【问题描述】:
我正在尝试覆盖文件的内容。该文件在大多数情况下都在使用。我知道如何在 Java 中执行此操作,但我不确定如何在 C# 中执行此操作。这就是我目前拥有的:
public bool ByteArrayToFile(string fileName, byte[] byteArray)
{
try
{
using (var fs = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
fs.Write(byteArray, 0, byteArray.Length);
return true;
}
}
catch (Exception ex)
{
Console.WriteLine("Exception caught in process: {0}", ex);
return false;
}
}
我正在尝试将字节数组写入文件。我使用 WebClient 从 URL 获取字节数组。当文件正在使用时,我得到一个 IOException,它表示我无法访问该文件,因为它正在被另一个进程使用。在 Java 中,我会这样做,使用 commons-io:
FileUtils.copyInputStreamToFile(new URL(url).openStream(), target);
上面的方法对我有用,但我似乎无法在 C# 中复制它。有办法吗?
【问题讨论】:
-
在这种情况下,您不能省略 FileShare 参数。在this post 中查找解码器环。
-
在这种情况下,什么是好的 FileShare 参数?
-
我不知道,当它不希望文件数据随机更改时,这通常会混淆其他进程的填充。在忙于读取文件时发生这种情况尤其有害。但是,如果不发生这种情况,FileShare.Read 将是一个起点。 FileShare.ReadWrite 消除了所有障碍。
-
如果其他进程偶然使用 FileShare.Delete (FILE_SHARE_DELETE) 打开了文件,您可以重命名该文件并使用原始文件名创建一个新文件。