D'une manière ou d'une autre, un fichier est apparu dans l'un de mes répertoires et il dispose d'espace à la fin de son extension -
Son nom est "test.txt". La chose étrange est que L'erreur se manifeste ici: P> annuaire.getfiles () code> me renvoie le chemin de cette
Fichier, mais je ne peux pas récupérer les informations de fichier avec
FileInfo code> Classe.
DirectoryInfo di = new DirectoryInfo("c:\\somedir");
FileInfo fi = di.GetFileSystemInfos("test*")[0] as FileInfo;
//correctly fi.FullName is "c:\somedir\test.txt "
//but fi.Exists==false (!)
3 Réponses :
Les noms de filets de fin avec un espace sont documentés comme une mauvaise idée. strong> p>
de msdn "Nommer des fichiers, des chemins et des espaces de noms (Windows) ": p>
Aussi, l'article de KB "" Info: noms de fichiers finissant par l'espace ou la période non prise en charge ": p>
Les problèmes peuvent survenir lorsqu'un client Macintosh crée un fichier sur un serveur Windows NT. Le code pour supprimer les espaces de fin et les périodes n'est pas effectué et l'utilisateur Macintosh obtient le nom de fichier correctement ponctué. Les APIS Win32 Par conséquent, pas un problème dans .NET spécifiquement, mais sous Windows elle-même. P>
FindFirstFile () CODE> et
FINTNEXTFILE () CODE> Retournez un nom de fichier qui se termine dans un espace ou dans une période; Cependant, il n'ya aucun moyen de créer ou d'ouvrir le fichier à l'aide de l'API Win32. P>
blockQuote>
répertoireIfo code> utilise probablement
FindFirstFile () code> et amis pour produire des listes de répertoires.
FILE.EXISTES CODE> est probablement implémenté via
getFileAttributes () code> qui souffre probablement du même problème que
Createefile () code> et signalera un fichier inexistant. p>
Oui, je connais ces fichiers. J'ai aussi eu une fois une telle chose de bête. Pour vous en débarrasser, je ne connais pas une voie de programmation en C #, mais une bonne ligne de commande est votre amie: p>
Ouvrez une fenêtre de la console dans le dossier donné (ou exécutez cmd em> et naviguez jusqu'au dossier avec la commande CD code>). Entrez maintenant
dir / x code> pour extraire le nom shortName des fichiers de ce répertoire. Utilisez ce nom pour supprimer ou renommer le fichier à l'aide de la commande
del code> ou
ren code>. P>
Merci Oliver. Que dir / x a fait l'affaire. J'ai eu le même problème et j'ai essayé de supprimer le fichier à l'aide du nom complet + extension, mais a été informé que le fichier ne pouvait pas être trouvé. Cependant, j'ai enfin pu la supprimer en utilisant le nom shortName.
Vous pourrez manipuler ces fichiers en contournant l'API Win32, c'est-à-dire via le sous-système POSIX ( CYGWIN CODE> COMMUNIQUES, tels que
MV code> et
touchez code> volonté. Manipuler ces noms de fichiers) ou éventuellement en préparé le chemin avec L "\\? \" (cela va également contourner les idiosyncrasies d'APIS Win32.)
@vladr merci. Chemin de préparation avec "\\" pour le fichier se terminant par un espace le truc pour la fonction Winapi FindFirstFile () code>. Cela pourrait également aider avec d'autres fonctions Winapi.
Vous pouvez manipuler des fichiers avec des espaces de fin (parmi les autres cas de bords) si vous utilisez la syntaxe \\ \\? \\ \\? \\ \\ code> Syntaxe:
\\ \ \ c: \ somedir \ test.txt < / code>. p>
Avez-vous exécuté un vérificateur de disque OS pour vous assurer que ce n'est pas un fichier corrompu? Serions-nous correct pour supposer que c'est sous Windows? Si oui quelle version?
Windows Vista Business X86, mais je suis sûr que j'ai quelque peu créé le fichier moi-même, il y a environ un an, selon la date