VB.NET : Problème de copie : chemin d'accès trop long
Anonyme209
Messages postés
681
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'ai créé un programme de sauvegarde qui copie des fichiers sources vers des dossiers de destination.
Le programme fonctionne correctement sauf lorsque le chemin d'accès de la source ou de la destination est trop long : le fichier n'est alors pas copié et une erreur est levée.
Cette erreur n'interrompt pas la sauvegarde, qui continue de copier les fichiers sources suivants, mais des fichiers ne sont alors pas sauvegardés, ce qui peut engendrer des pertes de données.
Une solution serait bien sûr de réduire le nombre de sous-dossiers ou de leur attribuer des noms plus courts, mais c'est contraignant et je ne peux de surcroît pas obliger les utilisateurs de mon programme à le faire.
J'aimerais donc savoir comment, en VB.NET, effectuer quand même la copie des fichiers au chemin d'accès trop long.
Je précise que j'utilise actuellement la méthode
Merci de votre aide.
J'ai créé un programme de sauvegarde qui copie des fichiers sources vers des dossiers de destination.
Le programme fonctionne correctement sauf lorsque le chemin d'accès de la source ou de la destination est trop long : le fichier n'est alors pas copié et une erreur est levée.
Cette erreur n'interrompt pas la sauvegarde, qui continue de copier les fichiers sources suivants, mais des fichiers ne sont alors pas sauvegardés, ce qui peut engendrer des pertes de données.
Une solution serait bien sûr de réduire le nombre de sous-dossiers ou de leur attribuer des noms plus courts, mais c'est contraignant et je ne peux de surcroît pas obliger les utilisateurs de mon programme à le faire.
J'aimerais donc savoir comment, en VB.NET, effectuer quand même la copie des fichiers au chemin d'accès trop long.
Je précise que j'utilise actuellement la méthode
FileStream.CopyToAsync. Faudrait-il que j'utilise une méthode/bibliothèque spéciale dans le cas où le chemin d'accès est trop long ?
Merci de votre aide.
A voir également:
- Chemin d'accès trop long
- Vb.net express - Télécharger - Langages
- Vb.net - Télécharger - Langages
- Convert | VB.net ✓ - Forum Framework .NET
- Vb.net editor - Télécharger - Langages
- Listview vb.net ✓ - Forum Framework .NET
4 réponses
Bonjour,
Essaie ceci:
Pour plus de détail voir ici:
https://codes-sources.commentcamarche.net/source/view/101479/1414833
@+ Le Pivert
Essaie ceci:
Public Sub CopyFile(ByVal sourceFileName As String, ByVal destinationFileName As String) My.Computer.FileSystem.CopyFile(sourceFileName, destinationFileName, FileIO.UIOption.AllDialogs) End Sub
Pour plus de détail voir ici:
https://codes-sources.commentcamarche.net/source/view/101479/1414833
@+ Le Pivert
Je ne peux pas tester pour le moment (je le fais dès que possible), mais étant donné que l'exception PathTooLongException fait partie de la liste des exceptions que la fonction peut soulever (à l'instar des fonctions précédentes), cela a peu de (voire aucune) chances de fonctionner.
Il est inutile de me proposer toutes les fonctions de copie qui existent dans le but qu'une d'entre elles fonctionne.
Il est inutile de me proposer toutes les fonctions de copie qui existent dans le but qu'une d'entre elles fonctionne.
Bonsoir
as tu pu determiner ce qui est trop long, le nombre de caractères, de sous-répertoire?
Est ce que comme tu le suggères dans ce message tes chemins font plus de 260 caractères?
as tu pu determiner ce qui est trop long, le nombre de caractères, de sous-répertoire?
Est ce que comme tu le suggères dans ce message tes chemins font plus de 260 caractères?
Bonjour,
Je dirais les deux... Il y a beaucoup de sous-répertoires, dont le nom de chacun - ainsi que celui du fichier - est assez long.
Le chemin source a une longueur "autorisée" (244 caractères (je prends l'exemple d'un des fichiers qui ne veulent pas se copier)) mais le chemin de destination est trop long (277 caractères).
as tu pu determiner ce qui est trop long, le nombre de caractères, de sous-répertoire?
Je dirais les deux... Il y a beaucoup de sous-répertoires, dont le nom de chacun - ainsi que celui du fichier - est assez long.
Le chemin source a une longueur "autorisée" (244 caractères (je prends l'exemple d'un des fichiers qui ne veulent pas se copier)) mais le chemin de destination est trop long (277 caractères).
Ici
https://stackoverflow.com/questions/8745215/best-way-to-resolve-file-path-too-long-exception
Une réponse propose la librairie Zeta Long Path.
Ça doit être plus simple que la réponse la mieux notée qui consiste à attribuer une lettre de lecteur à une partie du chemin, en commande dos, pour en réduire la taille.
https://stackoverflow.com/questions/8745215/best-way-to-resolve-file-path-too-long-exception
Une réponse propose la librairie Zeta Long Path.
Ça doit être plus simple que la réponse la mieux notée qui consiste à attribuer une lettre de lecteur à une partie du chemin, en commande dos, pour en réduire la taille.
Cette librairie semble intéressante, cependant, je n'ai trouvé que des fonctions qui permettent d'accéder aux informations sur les fichiers (notamment la taille du fichier), mais aucune qui permette d'effectuer la copie.
Si tu connais cette librairie, pourrais-tu m'expliquer comment l'utiliser pour copier les fichiers ?
Merci de votre aide.
Si tu connais cette librairie, pourrais-tu m'expliquer comment l'utiliser pour copier les fichiers ?
Merci de votre aide.
Cela ne fonctionne pas.
Voici mon code :
La liste "log" m'indique bien que les deux tentatives de copie échouent avec le même message d'erreur. Cependant, la deuxième tentative n'affiche aucune fenêtre de copie, contrairement à ce que l'argument " " est supposé faire. C'est à croire que la copie échoue avant que la fenêtre ait eu le temps de s'afficher.
Merci de votre aide.
https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file?redirectedfrom=MSDN
@+
Je suis au courant que la longueur limite pour un chemin d'accès est de 260 caractères. Ce n'est pas ce que je veux savoir.
Puisque Windows permet visiblement de stocker des fichiers dont la longueur du chemin d'accès dépasse la limite théorique, je pensais que l'on pouvait aussi outrepasser cette limitation en VB.NET.
Merci de votre aide.
C'est peut-être la conception de ton application qui est en cause!
A voir
@+
Je réponds à la fois au message de Whismeril et à celui de cs_Le Pivert.
J'ai créé une autre application, toute simple, composée seulement de deux zones de texte et de trois boutons (un pour chacune des trois fonctions proposées). Je tente de copier un des fichiers qui a causé problème à mon application de sauvegarde, et mon programme "test" retourne le même message d'erreur que précédemment, quelle que soit la fonction utilisée.
Je ne pense donc pas que ce soit la conception de mon application qui soit en cause (ce qui aurait été possible).
Merci de votre aide.