C# 如何复制已在使用的文件

C# 如何复制已在使用的文件,c#,winforms,copy-paste,C#,Winforms,Copy Paste,我在App\u Data文件夹中有两个文件(.mdf和.ldf)。现在我想复制这两个文件,需要在运行应用程序时粘贴到备份文件夹中。但我有一个错误: 进程无法访问文件“D:\App\u Data\”,因为它是 正在被另一个进程使用 这是我一直在使用的代码 string dir = Directory.GetDirectories(@"D:\","App_data").FirstOrDefault(); string targetPath = @"D:\Back_up_PayRoll\"; if

我在
App\u Data
文件夹中有两个文件(
.mdf
.ldf
)。现在我想复制这两个文件,需要在运行应用程序时粘贴到备份文件夹中。但我有一个错误:

进程无法访问文件“D:\App\u Data\”,因为它是 正在被另一个进程使用

这是我一直在使用的代码

string dir = Directory.GetDirectories(@"D:\","App_data").FirstOrDefault();
string targetPath = @"D:\Back_up_PayRoll\";

if (System.IO.Directory.Exists(dir))
{
    string[] files = System.IO.Directory.GetFiles(dir);

    if (!Directory.Exists(targetPath))
        Directory.CreateDirectory(targetPath);

    foreach (string s in files)
    {
        var fileName = System.IO.Path.GetFileName(s);

        var destFile = System.IO.Path.Combine(targetPath, fileName);
        System.IO.File.Copy(s, destFile, true);
        MessageBox.Show("BACK-UP Done..");
    }
}

如果在系统上可用,则可以使用

在C#中,有一个方便的库包装COM接口,但您可以直接实现它

如果VSS不可用,那么运气不好,无法绕过文件锁定


PS:当然,这不像
文件那么简单。复制

如果不先断开与MDF文件的连接,就无法以任何方式访问MDF文件


最好的办法是使用SQL进行备份,或者关闭应用程序并通过运行BAT文件进行复制

使用卷影复制:然后如何停止另一个应用程序正在使用文件的过程声音如。你到底想做什么?为什么您需要在自己的应用程序使用数据库文件时复制这些文件?是的@zespri,我需要将这些文件复制为备份—这些文件是SQL Server数据和事务日志文件—不要简单地复制它们!使用适当的SQL Server
备份数据库
命令备份SQL Server数据库!那么如何停止另一个进程正在使用的文件,您可以检查我没有使用Sql Server,顺便说一下。。。