以编程方式复制和粘贴文件

Posted

技术标签:

【中文标题】以编程方式复制和粘贴文件【英文标题】:Copy and paste a file programmaticaly 【发布时间】:2014-02-26 15:17:17 【问题描述】:

问题背景:

我需要将文件从一个文件夹位置复制并粘贴(移动)到另一个位置。

问题:

System.IOFile.Copy 方法要求两个参数都具有已知文件位置。我只知道一个文件路径位置——在本例中为localDevPathlocalQAPath 是我希望复制的文件也被移动到的文件夹路径。

string localDevPath = @"C:\Folder1\testFile.cs";

string localQaPath = @"C:\Folder2\";

File.Copy(localDevPath, localQaPath);

谁能告诉我如何执行我正在尝试实施的这种“复制和粘贴”方法。

【问题讨论】:

File.Move 怎么样? 你的代码有什么问题?你总是知道两个文件的位置,因为如果你不知道文件在哪里,你就不能复制它,你也不能把它复制到你不知道的地方。如果“问题”是您的 QaPath 只是一个文件夹,则标准是将新文件命名为与以前的文件相同。只需获取最后一个 / 之后的子字符串 【参考方案1】:
string localDevPath = @"C:\Folder1\testFile.cs";
string localQaPath = @"C:\Folder2\";
FileInfo fi = new FileInfo(localDevPath);
fi.MoveTo(Path.Combine(localQaPath, fi.Name));

【讨论】:

【参考方案2】:

假设这些是用户提供的路径并且您不能简单地将文件名包含在第二个路径中,那么您需要从localDevPath 中提取最后一个路径元素,然后将其添加到localQaPath。您可以使用Path.GetFilename 来做到这一点。

【讨论】:

我可以简单地将 'TestFile.cs' 附加到 'localQaPath' 中,即使它当前不存在于 'Folder2' 中,它也会被覆盖和添加? 是的,这实际上是最简单的解决方案。不过,我不明白您所说的覆盖是什么意思。如果它不存在,它如何被覆盖?至于如果它确实存在会发生什么,我会查看File.Copy 文档。【参考方案3】:

我猜这里的问题是文件名是可变的,在这种情况下,你可以这样做从 localDevPath 的完整路径中提取文件名:

string localDevPath = @"C:\Folder1\testFile.cs";
string localQaPath = @"C:\Folder2\";
string[] tokens = localDevPath.Split(@"\");
localQaPath += tokens[tokens.Length-1];

File.Copy(localDevPath, localQaPath);

有关 File.Copy 的文档位于 MSDN。有一个接受布尔值的重载,以便在存在命名冲突时允许覆盖。

【讨论】:

【参考方案4】:

如果您想要将文件从一个位置移动到另一个位置,您正在寻找的方法是 MoveTo。它是 FileInfo 类的一个方法。这里的MSDN库中有一个非常完整的例子:FileInfo.MoveTo Example

【讨论】:

以上是关于以编程方式复制和粘贴文件的主要内容,如果未能解决你的问题,请参考以下文章

是否有通过 Windows 资源管理器以编程方式剪切/复制/粘贴文件的 Windows API?

有没有办法以编程方式将 Excel 单元格保存到可以加载的本地文件,就像使用 VSTO 的“复制和粘贴”一样?

怎样复制文件路径

可以以编程方式使用新的WP7剪切和粘贴功能吗?

如何以编程方式复制包含的文件

指定从 Qt 应用程序复制的文本格式?粘贴时以某种方式使其他应用程序崩溃