2016-11-10 53 views
-1

我有以下代碼,它將txt的擴展名更改爲doc,然後將其移動(從d:\ 1到d:\ 2)。擴展名成功更改,但不會移動,但出現錯誤更改擴展名和移動文件,使用vb.net

當該文件已存在時,無法創建文件。

請建議。

For Each filePath In Directory.GetFiles("D:\1", "*.txt") 
    File.Move(filePath, Path.ChangeExtension(filePath, ".doc")) 
Next 
Dim filesToMove = From f In New DirectoryInfo("d:\1").EnumerateFiles("*.doc") 
For Each f In filesToMove 
    f.MoveTo("d:\2") 
Next 
+0

你調用'MoveTo'方法時應該是路徑(包括目標文件名)提供參數,而不僅僅是目錄。檢查[MSDN文檔](https://msdn.microsoft.com/en-us/library/system.io.fileinfo.moveto(v = vs.110).aspx)。 – Blackwood

+0

剛剛擺脫'從f in'並將括號放在'New DirectoryInfo(「d:\ 1」)周圍' –

回答

0

這將檢查相同名稱的現有文件並首先刪除它(您可能想要以不同的方式處理)。然後它會移動,並在一個調用重命名爲File.Move

Dim directory1 = "D:\1" 
Dim directory2 = "D:\2" 
For Each oldFileName In Directory.GetFiles(directory1, "*.txt") 
    Dim newFileName = Path.ChangeExtension(oldFileName, ".doc").Replace(directory1, directory2) 
    If File.Exists(newFileName) Then File.Delete(newFileName) 
    File.Move(oldFileName, newFileName) 
Next 
+0

OP中的問題似乎並不是文件存在,而是從目標中省略文件名路徑(每個文件正在被複制到「D:\ 2」而不是「D:\ 2 \ 」 – Blackwood

+0

好極了,那麼這就解決了他的問題,並且更強健一點。 – djv

+0

這不起作用 – vicki

0

OK,終於找到了解決辦法。不是很專業,但作品反正:(非常感謝誰剛纔幫助所有成員)

Private Sub logchange(ByVal source As Object, 
         ByVal e As System.IO.FileSystemEventArgs) 
    If e.ChangeType = IO.WatcherChangeTypes.Changed Then 

     Dim sourceDirectory As String = "D:\1" 
     Dim archiveDirectory As String = "D:\2" 
     Try 
      Dim jpgFiles = Directory.EnumerateFiles(sourceDirectory, "*.wav") 
      For Each currentFile As String In jpgFiles 
       Dim fileName = Path.GetFileName(currentFile) 
       Directory.Move(currentFile, Path.Combine(archiveDirectory, 
        Path.GetFileNameWithoutExtension(fileName) & ".doc")) 
      Next 
     Catch ex As Exception 
      Console.WriteLine(ex.Message) 
     End Try 

    End If 

    If e.ChangeType = IO.WatcherChangeTypes.Created Then 

     Dim sourceDirectory As String = "D:\1" 
     Dim archiveDirectory As String = "D:\2" 
     Try 
      Dim jpgFiles = Directory.EnumerateFiles(sourceDirectory, "*.wav") 
      For Each currentFile As String In jpgFiles 
       Dim fileName = Path.GetFileName(currentFile) 
       Directory.Move(currentFile, Path.Combine(archiveDirectory, 
        Path.GetFileNameWithoutExtension(fileName) & ".doc")) 
      Next 
      Catch ex As Exception 
       Console.WriteLine(ex.Message) 
     End Try 

    End If 

End Sub