0

我有以下用于复制文件的代码:

var copedFile = ConfigurationManager.AppSettings["PathToFirebirdDB"] + ".001";

using (var inputFile = new FileStream( ConfigurationManager.AppSettings["PathToFirebirdDB"],
        FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
    using (var outputFile = new FileStream(copedFile, FileMode.Create))
    {
        var buffer = new byte[0x10000];
        int bytes;

        while ((bytes = inputFile.Read(buffer, 0, buffer.Length)) > 0)
        {
            outputFile.Write(buffer, 0, bytes);
        }
    }
}

此代码只能正常工作一次。下次我收到以下消息时:

 The process cannot access the file 'D:\Programs\IBExpert\db.fdb.001' because it is being used by another process. System.IO.IOException: The process cannot access the file 'D:\Programs\IBExpert\db.fdb.001' because it is being used by another process.

为什么?有using块。

4

2 回答 2

1

如果您在关闭文件后尝试重新打开文件,则该文件仍有可能被系统认为是打开的,因为它实际上是打开的。

一个典型的原因是病毒扫描程序保持文件打开以确保它没有被感染,这发生在后台,并且可能在您自己关闭文件后继续运行。

于 2012-09-27T10:01:16.987 回答
0

可能是因为您没有关闭文件。

顺便说一句,你为什么不直接使用File.Copy

于 2012-09-27T09:52:18.097 回答