c# - File.Copy 和 File.Move 的区别

标签 c# file file-io

现在我正在处理一个小型应用程序,它更新 iss 服务器上的 mssql 紧凑型数据库文件。

我更喜欢使用 SSIS 来组织流程。几天来它运行良好,但随后开始出错。

在 SSIS 中,我使用“文件系统任务”的“移动文件”操作将生成的文件从文件夹移动到 iss 服务器的共享文件夹。如果失败,在锁定文件的情况下,它会稍后再试。但我看到有时目标文件夹中的文件开始消失。

然后我决定编写自定义代码。我已经删除了“文件系统任务”并放置了一个“脚本任务”来代替它。并在其中写几行。

string destinationFile, sourceFile;
destinationFile = Path.Combine(Dts.Variables["FileRemoteCopyLocation"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString());
 sourceFile = Path.Combine(Dts.Variables["OrginalFilePath"].Value.ToString(), Dts.Variables["CreatedFileName"].Value.ToString());


bool written = false;


 try
 {
     File.Copy(sourceFile, destinationFile, true);
     File.Delete(sourceFile);
     written = true;
 }
 catch(IOException) {
    //log it
 }


if (written)
     Dts.TaskResult = (int)ScriptResults.Success;
else
     Dts.TaskResult = (int)ScriptResults.Failure;

效果很好。但是我通过锁定目标文件来尝试它。我已经在 Sql Server Management Studio 中连接了目标文件(它是一个 sdf 文件)。令人惊讶的是它也有效。

我已经从操作系统中尝试过,方法是复制源文件并将其粘贴到目标位置。 Windows 7 问我是否要覆盖它,我说是,它覆盖了我在另一个进程中使用的文件(复制和替换),没有警告也没有错误。 但是如果尝试重命名或删除它不会让我这样做。或者,如果我尝试剪切并粘贴它(移动和替换),它会显示“您需要获得执行此操作的权限”。

据我了解,“复制、删除”和“移动”是完全不同的事情。而且我仍然不明白如何覆盖锁定的文件。

有什么想法吗?

最佳答案

File.Move 方法可用于将文件从一个路径移动到另一个路径。此方法跨磁盘卷工作,如果源和目标相同,则不会抛出异常。

您不能使用 Move 方法覆盖现有文件。如果您尝试通过将同名文件移动到该目录中来替换该文件,则会出现 IOException。 要克服这个问题,您可以结合使用复制和删除方法

原始答案来自:Difference between in doing file copy/delete and Move

关于c# - File.Copy 和 File.Move 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6790331/

相关文章:

c++ - 使用结构数组计算?

c# - 将字符串转换为 WebControls - asp.net

c# - 如何在 visual studio for mac 中将参数传递给 Main() C#

c - fputc/fprintf 无法写入我的文件

php - 通过 get 使用唯一 token 是否安全?

multithreading - 在不同平台上使用 sqlite 和文件锁定是否存在已知问题?

c# - 如果将摘要添加为引用,则摘要不会显示在程序集中

c# - 将列表转换为数据表

android - 在下载文件之前预先为其分配空间

c - 使用 C 中的线程写入全局文件