C#Getting Runtime error:进程无法访问该文件,因为它正由另一个进程使用

时间:2017-06-07 00:35:00

标签: c# .net filestream

这是我的代码: 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但没有运气。

2 个答案:

答案 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)

sourcedest都引用了同一个文件。在第一个实例(source)中,您可以独占打开它(即不共享)。

在第二个实例(dest)中,您现在要创建在第一个实例中打开的文件,但允许它共享。

由于source已经在使用中,因此您无法使用dest覆盖其顶部。

我认为您真正想要的是让path的{​​{1}}参数与dest的{​​{1}}参数不同,因为您实际上是试图将相同的数据重新写入同一位置的同一文件中。