这是我的代码: enter image description here
using System.IO;
namespace Randoms
{
public class Program
{
public static void Main()
{
byte[] buffer = new byte[10240]; // buffer size
string path = @"C:\Users\RAHUL\Desktop\file.txt";
using (FileStream source = new FileStream(path, FileMode.Open, FileAccess.Read))
{
long fileLength = source.Length;
using (FileStream dest = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))
{
long totalBytes = 0;
int currentBlockSize = 0;
while ((currentBlockSize = source.Read(buffer, 0, buffer.Length)) > 0)
{
totalBytes += currentBlockSize;
double percentage = (double)totalBytes * 100.0 / fileLength;
dest.Write(buffer, 0, currentBlockSize);
}
}
}
}
}
}
请检查显示我得到的错误的图片。我试图多次更改FileAccess但没有运气。
答案 0 :(得分:0)
这篇文章解释了如何使用单个流读取和写入文件:
How to both read and write a file in C#
考虑到您可能在之前的错误运行中仍然打开了该文件。使用Sysinternals Process Monitor或Unlocker等工具来验证它是否未被其他实例打开。
如何使用Process Monitor:
http://www.manuelmeyer.net/2013/09/tooltips-unlocking-files-with-sysinternals-process-monitor/
答案 1 :(得分:0)
source
和dest
都引用了同一个文件。在第一个实例(source
)中,您可以独占打开它(即不共享)。
在第二个实例(dest
)中,您现在要创建在第一个实例中打开的文件,但允许它共享。
由于source
已经在使用中,因此您无法使用dest
覆盖其顶部。
我认为您真正想要的是让path
的{{1}}参数与dest
的{{1}}参数不同,因为您实际上是试图将相同的数据重新写入同一位置的同一文件中。