2017-03-03 4 views
-1

Je rencontre un problème avec l'utilisation de FileSystemObject.CopyFile. Je pense que je l'utilise correctement, des forums, je l'ai lu, mais je reçois toujours l'erreur du compilateur suivant:FileSystemObject CopyFile: Exception non gérée

ArgumentException was unhandled: Value does not fall within expected range

Voici le code:

Public Class Form1 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim fso As New Scripting.FileSystemObject 
    Dim testfolderchk 
    testfolderchk = Dir("C:\Test\") 
    Dim inforeader As System.IO.FileInfo 
    Dim filedestinationcheck = Dir("C:\Test2\") 

    If testfolderchk <> "" Then 
     If Microsoft.VisualBasic.Left(testfolderchk, 4) = "test" Then 
      inforeader = My.Computer.FileSystem.GetFileInfo("C:\Test" & testfolderchk) 
      filetime = (inforeader.LastWriteTime) 
      If testfolderchk = filedestinationcheck Then GoTo skipfile 
      If testfolderchk = filedestinationcheck2 Then GoTo skipfile 

     Else : GoTo skipfile 
     End If 
    End If 

fso.CopyFile(testfolderchk, filedestinationcheck, True) 
+3

Le 'système L'espace de noms .IO 'a toutes sortes de méthodes liées au fichier qui sont mieux adaptées au code NET que 'FileSystemObject'. – Plutonix

+0

Suggestions? N'importe qui? – user2644085

+0

'Suggestions?' Oui, ne pas utiliser FSO et ne pas utiliser 'GoTo'. Et avec juste un peu de recherche, vous pouvez trouver des centaines d'applets de copie de fichiers ici – Plutonix

Répondre

2

Comme suggéré dans la commentaires que vous devez supprimer l'utilisation de FileSystemObject et d'utiliser plutôt l'espace de noms System.IO, en particulier FileInfo:

Provides properties and instance methods for the creation, copying, deletion, moving, and opening of files, and aids in the creation of FileStream objects. This class cannot be inherited.

Avec FileInfo vous ca n utiliser la méthode CopyTo (String, Boolean):

Copies an existing file to a new file, allowing the overwriting of an existing file.

J'ai rédigé un peu de code pour vous montrer ce que je veux dire:

Dim folderToCheck As String = "C:\Test" 
Dim destinationFolder As String = "C:\Test2" 

Dim file As IO.FileInfo = New IO.FileInfo(IO.Path.Combine(folderToCheck, "test.txt")) 

Dim filetime As Date = file.LastWriteTime 

file.CopyTo(IO.Path.Combine(destinationFolder, file.Name), True) 

Notez l'utilisation de Path.Combine:

Combines two strings into a path.

+1

Merci. J'ai fait quelque chose de similaire et ça a fini par bien fonctionner. Je vous en suis reconnaissant. @Bogues – user2644085