更好的方法来复制移动重命名文件,Visual Basic(VS 2012 V11)

时间:2013-05-08 02:13:49

标签: vb.net copy rename overwrite file-copying

我想复制,重命名并将文件移动到新位置。根据{{​​3}},以下代码应该这样做:

  

此示例将文件Test.txt复制到目录TestFiles2和   将其重命名为NewFile.txt。

My.Computer.FileSystem.CopyFile _
("C:\UserFiles\TestFiles\test.txt", _
"C:\UserFiles\TestFiles2", "NewFile.txt", FileIO.UICancelOption.DoNothing)

但是,当我键入此代码时,它只会将“NewFile.txt”参数视为处理覆盖的布尔参数。我认为这是网站上的一个错误。

如果我不能使用“My.Computer.FileSystem.CopyFile”(除非我做错了)复制重命名并移动文件,那么还有更好的方法:

' Rename the file to be copied the name you want it to be in the new location
My.Computer.FileSystem.RenameFile("C:\OriginalFile.txt", "OriginalFileTemporaryName.txt")

' Copy the file to the new location and overwrite if it exists there
My.Computer.FileSystem.CopyFile ("C:\OriginalFileTemporaryName.txt", "C:\UserFiles\TestFiles2", True)

' Rename the original file back to it's original name
My.Computer.FileSystem.RenameFile("C:\OriginalFileTemporaryName.txt", "OriginalFile.txt")

我遇到的问题是,我可能最终将原始文件重命名为原始文件位置中已存在的临时名称。我想避免这种情况。我也不想在目标文件夹中重命名复制的文件,因为我没有看到强制覆盖“My.Computer.FileSystem.RenameFile”的选项

这甚至是一个不错的解决方案吗? 有没有更好的方法呢?

2 个答案:

答案 0 :(得分:2)

我认为你有语法错误。您试图将目标文件名作为两个参数 - 目录名和文件名,当您应将两者都作为一个字符串时。

 My.Computer.FileSystem.CopyFile ("C:\UserFiles\TestFiles\test.txt", "C:\UserFiles\TestFiles2\NewFile.txt")
像那样。第三个参数可以是布尔值(True / False) - 是否要覆盖目标文件(如果存在)。

如果要首先检查文件是否存在,请查看System.IO.File类,它具有“Exists”方法,该方法接受文件名并返回boolean。它还有一些方法来操作你可以使用的文件而不是FileSystem类,尽管没有性能优势。

答案 1 :(得分:1)

在网站上看起来确实是个错误。但这不应该阻止我们;只需将目录和文件名放入相同的参数:

My.Computer.FileSystem.CopyFile("C:\UserFiles\TestFiles\test.txt", "C:\UserFiles\TestFiles2\NewFile.txt", FileIO.UICancelOption.DoNothing)

(如果你想强制覆盖,请将第三个参数更改为True。我不知道你可以在同一个电话中覆盖并传递CancelOption.DoNothing。)