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
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.
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 \\
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.
Il peut y avoir une des deux causes de cette erreur:
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.
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
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);
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é.
La réponse est apparue, d'autre part, je pense que vous devriez utiliser
using System.IO;
Au lieu de "compliqué" syntaxe ci-dessus.