gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 19:41:45 26 4
gpt4 key购买 nike

现在我正在处理一个小型应用程序,它更新 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com