我可以覆盖正在使用的文件吗?(C#)



我正在尝试覆盖文件的内容。在大多数情况下,该文件正在使用中。我知道如何在 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# 中复制它。有没有办法做到这一点?

不能覆盖正在使用并被 Windows 中另一个进程锁定的文件。您需要找到具有文件句柄的进程并终止该进程才能释放句柄。

如果您正在编写或控制访问文件的程序/进程,也许可以考虑使用类似System.IO以下内容:

FileStream.Lock - "防止其他进程读取或写入 FileStream">

FileStream.Unlock - "允许其他进程访问以前锁定的全部或部分文件。

最新更新