2017-06-15 3 views
0

J'ai une application qui est censé copier un fichier sélectionné dont le répertoire est écrit dans txtbox1 dans un dossier de directeur écrit en txtbox2 comme suit:La copie d'un fichier à partir d'un répertoire à un autre

Code:

Dim sourcepath As String = TextBox1.Text 
    Dim DestPath As String = TextBox2.Text 
    CopyDirectory(sourcepath, DestPath) 

appelé sous:

Private Shared Sub CopyDirectory(ByVal sourcePath As String, ByVal destPath As String) 
    If Not Directory.Exists(destPath) Then 
     Directory.CreateDirectory(destPath) 
    End If 
    For Each file__1 As String In Directory.GetFiles(Path.GetDirectoryName(sourcePath)) 
     Dim dest As String = Path.Combine(destPath, Path.GetFileName(file__1)) 
     File.Copy(file__1, dest) 
    Next 
    For Each folder As String In Directory.GetDirectories(Path.GetDirectoryName(sourcePath)) 
     Dim dest As String = Path.Combine(destPath, Path.GetFileName(folder)) 
     CopyDirectory(folder, dest) 
    Next 
End Sub 

Ce code copie tous les fichiers, et non celle spécifiée uniquement. Quelqu'un peut-il s'il vous plaît me dire comment faire cette sous-copie seulement le fichier sélectionné ne pas tous les fichiers dans le dossier?

+2

Il n'y a rien là pour choisir quoi que ce soit. Sélectionné * comment - l'utilisateur est-il censé les sélectionner? S'il vous plaît clarifier et lire [demander] et prendre le [tour] – Plutonix

+0

quels sont les fichiers sélectionnés? il n'y a nulle part une sorte de tableau de, disons, fichier (s) sélectionné (s) – nelek

+0

Merci pour la remarque que j'ai mis à jour ma question, j'espère qu'elle fournit suffisamment d'informations maintenant. –

Répondre

1

Vous prenez le chemin entier comme argument (quelque chose comme ceci: C: /someDirectory/filename.txt) et ne comparez pas le nom de fichier aux autres noms de fichiers dans ce répertoire.

Au lieu d'utiliser:

For Each file__1 As String In Directory.GetFiles(Path.GetDirectoryName(sourcePath)) 
    Dim dest As String = Path.Combine(destPath, Path.GetFileName(file__1)) 
    File.Copy(file__1, dest) 
Next 

Essayez:

Dim sourceFileName = Path.GetFileName(sourcePath) 
For Each filePath As String in Directory.GetFiles(Path.GetDirectoryName(sourcePath)) 
    Dim filename As String = Path.GetFileName(filePath) 
    If sourceFileName = filename 
    'Do your copy code here 
    End If 
Next 
+2

Il serait probablement préférable d'utiliser la méthode [Path.GetFileName] (https://msdn.microsoft.com/en-us/library/system.io.path.getfilename (v = vs.110) .aspx) pour extraire le nom d'un fichier d'un chemin, par opposition à la séparation manuelle de la chaîne. –

+0

Ah, vous avez raison. Je ne travaille généralement pas avec les noms de fichiers, donc je n'étais pas sûr des méthodes que Path avait. – Wenadin