2010-10-29 4 views
2

Il y a plusieurs questions liées sur stackoverflow mais soit ma situation est différente, soit je suis trop bête pour les relier à la situation. J'espère que quelqu'un pourra m'aider avec ça. De plus, je ne suis même pas vraiment un développeur .NET donc je m'excuse d'avance pour toute mauvaise utilisation de la terminologie.Directory.SetCurrentDirectory throws PathTooLongException

Mon scénario est le suivant: L'outil utilisé pour déployer notre application .net (One Click?) Le place dans un répertoire dont le nom complet dépasse 300 caractères. L'application utilise un composant tiers - appelons-le dbstore - qui traite le fichier spécifié qui réside dans le répertoire de déploiement de l'application.

Jusqu'à présent, nous utilisions Assembly.GetExecutingAssembly().GetName().CodeBase pour construire le nom complet du fichier à transmettre à dbstore. Mais dbstore utilise des API de style ancien et échoue lorsqu'il tente d'ouvrir le fichier.

Étant donné que le composant dbstore ne devrait pas changer rapidement, il a été recommandé que l'application chdir dans le répertoire de déploiement et lui transmette un nom de chemin relatif dans le répertoire courant. C'est aussi l'approche décrite dans la réponse acceptée PathTooLongException in C# code

Cependant, je trouve que Directory.SetCurrentDirectory lance également PathTooLongException. Cela se produit même lorsque j'utilise un nom de chemin UNC, par exemple un nom commençant par \\?\0000000000000\...

Est-ce que je fais quelque chose de fondamentalement faux? Y at-il une autre fonction à utiliser?

EDIT: Il semble qu'il n'y ait aucun moyen de réaliser ce que je cherche. Tout ce que je peux dire, il n'y a aucun moyen de définir un répertoire long sur un chemin long.

Répondre

0

Obtenez-vous un résultat similaire lorsque vous utilisez Environment.SetCurrentDirectory()?

Si tel est le cas, vous pouvez changer votre sous-dossier de répertoire après le sous-dossier.

EDIT:
Windows définit en fait une limitation de 255 caractères pour un chemin de fichier (ou 260) WinXP (Vista) caractères. Notez que cette limitation ne s'applique pas au système de fichiers. Vous pouvez donc stocker un fichier dans un chemin de répertoire aussi long, mais Windows Explorer et de nombreux services Windows ne peuvent pas lire à partir de ce chemin.

En fait, il semble également inclure des méthodes de framework .NET car vous ne pouvez pas accéder à de tels fichiers. Vous devrez peut-être écrire votre propre API de système de fichiers, mais c'est un peu trop lourd. Tu ne peux pas raccourcir le chemin du fichier? Est-ce que Windows offre un moyen plus court d'adresser un fichier (comme les noms de fichiers de 8 octets)?

Source:http://labnol.blogspot.com/2006/10/limitations-with-long-file-names-on.html

+0

Il n'y a pas '' Environment.SetCurrentDirectory' mais la propriété Environment.CurrentDirectory' peut être attribué. Je reçois le même résultat avec ça. Je reçois également la même exception après la limite de longueur de nom de fichier même si je change de sous-dossier après sous-dossier, quelle que soit la fonction que j'utilise. –

+0

Quel est votre système d'exploitation? –

+0

Salut Igor Je cours cela sur Windows XP SP3. –

Questions connexes