web-dev-qa-db-fra.com

Message d'erreur "Impossible de trouver une partie du chemin"

Je suis en train de programmer en c # et je veux copier un dossier avec des sous-dossiers depuis un disque flash au démarrage.

Voici mon code:

private void copyBat()
{
    try
    {
        string source_dir = "E:\\Debug\\VipBat";
        string destination_dir = "C:\\Users\\pc\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup";

        if (!System.IO.Directory.Exists(destination_dir))
        {
            System.IO.Directory.CreateDirectory(destination_dir);
        }       

        // Create subdirectory structure in destination    
        foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories))
        {
            Directory.CreateDirectory(destination_dir + dir.Substring(source_dir.Length));          
        }

        foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories))
        {
            File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);
        }
    }
    catch (Exception e)
    {
        MessageBox.Show(e.Message, "HATA", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    }
}

J'ai une erreur:

Impossible de trouver une partie du chemin E:\Debug\VipBat

16
user3313131

L'erreur est explicite. Le chemin que vous essayez d'accéder n'est pas présent.

string source_dir = "E:\\Debug\\VipBat\\{0}";

Je suis sûr que ce n'est pas le bon chemin. Le dossier Debug directement dans le lecteur E: ne me semble pas correct. Je suppose qu'il doit y avoir le répertoire de dossiers du nom du projet présent.

Deuxième chose; Qu'est-ce que {0} dans votre chaîne? Je suis sûr que c'est un paramètre fictif d'argument car le nom du dossier ne peut pas contenir {0} Un tel nom. Vous devez donc utiliser String.Format() pour remplacer la valeur réelle.

string source_dir = String.Format("E:\\Debug\\VipBat\\{0}",variableName);

Mais vérifiez d’abord le chemin que vous essayez d’accéder.

18
Sachin

Il y a quelque chose de faux. Vous avez écrit:

string source_dir = @"E:\\Debug\\VipBat\\{0}";

et l'erreur était

Impossible de trouver une partie du chemin E\Debug\VCCSBat

Ce n'est pas le même répertoire.

Dans votre code, il y a un problème, vous devez utiliser:

string source_dir = @"E:\Debug\VipBat"; // remove {0} and the \\ if using @

ou

string source_dir = "E:\\Debug\\VipBat"; // remove {0} and the @ if using \\
5
Akrem

Le lecteur E est-il un lecteur mappé? Ensuite, il peut être créé par un autre compte que le compte d'utilisateur. Cela peut être la cause de l'erreur.

4
ThorstenC

Il peut y avoir une des deux causes de cette erreur:

  1. Le chemin n'est pas correct - mais il est moins probable que CreateDirectory crée n'importe quel chemin sauf si le chemin lui-même n'est pas valide, lisez des caractères non valides.
  2. Les comptes sur lesquels votre application est en cours d'exécution ne disposent pas des droits nécessaires pour créer un répertoire à l'emplacement du chemin, comme si vous tentiez de créer un répertoire sur un lecteur partagé sans privilèges suffisants, etc.
2
techExplorer

Probablement non lié, mais envisagez d'utiliser Path.Combine Au lieu de destination_dir + dir.Substring(...). À première vue, votre .Substring () laissera un contrecoup au début, mais les classes auxiliaires comme Path sont là pour une raison.

2
Drew Delano

J'ai eu la même erreur, bien que dans mon cas, le problème concernait le formatage du chemin DESTINATION. Les commentaires ci-dessus sont corrects en ce qui concerne le débogage du formatage de la chaîne de chemin, mais il semble y avoir un bogue dans le rapport d'exception File.Copy dans lequel il renvoie toujours le chemin SOURCE au lieu du chemin DESTINATION. Alors n'oubliez pas de regarder ici aussi.

-TC

2
TJC
File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true);

Cette ligne a l'erreur car ce que le code attendu est le directory name + file name, pas le nom du fichier.

C'est le bon

File.Copy(source_dir + file_name, destination_dir + file_name.Substring(source_dir.Length), true);
1
Ryan Chong

J'ai résolu un problème similaire en redémarrant simplement Visual Studio avec les droits d'administrateur.

Le problème était dû au fait qu’il ne pouvait pas ouvrir un projet lié à Sharepoint sans accès élevé.

1
K48

La réponse est apparue, d'autre part, je pense que vous devriez utiliser

using System.IO;

Au lieu de "compliqué" syntaxe ci-dessus.

0
Phu Le Ngo