Bonjour à tous,
Je cherche à copier des fichiers qui ont un chemin supérieur à 260 caractères.
Si j'ai bien compris, File.Copy ne permet pas ce genre d'action. Il faut passer par Win32.CopyFile pour le faire à condition de précéder le chemin par.
Code : Sélectionner tout - Visualiser dans une fenêtre à part \\?\
Chez moi ça ne marche pas. Le code erreur en retour est 0x3 (path non trouvé) alors que si je copie le chemin dans une fenêtre explorateur j'y accède bien.
Les fichiers sont stockées dans une structure DFS. Est-ce que cette structure nécessite un traitement particulier ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 string src = @"\\?\mon_serveur\mon_repertoire\mon_fichier.ext"; if (Kernel32.CopyFile(src, f2c.getDest, true)) { Console.WriteLine("[SUCCESS] Copie du fichier {0} vers {1}", src, f2c.getDest); list_updSQL.Add(String.Format(@"UPDATE dbo.Fichier SET NOM_FICHIER_COPIE = '{0}' WHERE HASH_FICHIER ='{1}' ;", src, f2c.getHash)); } else { Console.WriteLine("[FAILED][ERROR {0}] Copie du fichier {1} vers {2}", Kernel32.GetLastError().ToString(), src, f2c.getDest); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern bool CopyFile(string lpExistingFileName, string lpNewFileName, bool bFailIfExists); [DllImport("kernel32.dll", CharSet = CharSet.Unicode)] public static extern UInt32 GetLastError();
Si vous avez des idées ou pistes, merci beaucoup
Bien cordialement
lephotographe
Partager