文件之间的差异.复制和文件,移动

本文关键字:文件 移动 复制 之间 | 更新日期: 2023-09-27 18:03:14

现在我正在处理一个小应用程序,它更新了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管理工作室的目标文件(它是一个sdf文件)。令人惊讶的是,它也起作用了。

我已经从操作系统中尝试过,通过复制源文件并将其粘贴到目标。Windows 7问我是否要覆盖它,我说是的,它覆盖了我用另一个进程使用的文件(复制和替换),没有警告也没有错误。但如果我想重命名或删除它不允许我这样做。或者如果我尝试剪切和粘贴它(移动和替换),它会说"你需要许可才能做这个动作"。

据我所知,"复制、删除"answers"移动"是完全不同的事情。我还是不明白我怎么能覆盖一个被锁定的文件。

任何想法?

文件之间的差异.复制和文件,移动

文件。Move方法可用于将文件从一个路径移动到另一个路径。此方法适用于所有磁盘卷,并且如果源卷和目标卷相同,则不会抛出异常。

不能使用Move方法覆盖现有文件。如果您试图通过将同名文件移动到该目录中来替换文件,则会得到IOException。为了克服这个问题,你可以结合使用Copy和Delete方法

虽然这个话题并不新鲜,但我想分享一下我的经验。我不得不更改我的数字图书馆里的pdf文件的名称。当我使用File.Copy()方法通过更改名称将大约10,000篇法律文章复制到另一个文件夹时,其中一半大约需要15分钟,我停止了这个过程,因为它太长了。然后,当我用File.Move()方法尝试同样的事情时,结果对我来说是令人难以置信的:它花了不到1分钟的时间来移动整个东西。当然,我不需要说所有这些都与系统特性直接相关。