7
votes

Colon / Asterisk comme délimiteur de nom de fichier?

Je recherche un personnage pour utiliser un nom de fichier de fichier de fichier (je stocke plusieurs noms de fichiers dans une chaîne plainte). Windows semble ne pas autoriser : , ? , * , << / code>, , ", | , / et \ dans les noms de fichiers. Évidemment, \ et < code> / ne peut pas être utilisé, car ils signifient quelque chose sur un chemin. Y a-t-il une raison pour que l'une de ces autres ne devait pas être utilisée? Je pense juste que, semblable à / < / code> ou \ , ces autres caractères non autorisés peuvent avoir une signification particulière que je ne devrais pas supposer ne sera pas dans les noms de chemin. de ces 7 autres caractères, sont définitivement sûrs ou sans danger à utiliser à cette fin?


3 commentaires

Pourquoi créer des problèmes pour vous-même? Allez avec les communs, comme Dash "-" ou des points "."


La mauvaise nouvelle est la suivante: sur de nombreux systèmes UNIX, le seul caractère qui n'est pas autorisé dans un nom de fichier est "/". Tous les autres sont valables (bien qu'ils puissent avoir besoin de s'échapper pour les cacher de la coquille par exemple).


Vous pouvez utiliser '/' dans les chemins UNIX (mais si vous faites cela, vous êtes Satan). À peu près la seule chose que vous ne pouvez pas utiliser est null.


6 Réponses :


0
votes

Il est réellement possible de créer des fichiers de manière programmatique avec chaque caractère possible, sauf \ . (Au moins, c'était vrai à la fois et il est possible que Windows ait changé sa politique depuis.) Naturellement, les fichiers contenant certains caractères seront plus difficiles à travailler avec des autres.

Qu'est-ce que vous utilisiez pour déterminer les fenêtres de caractères permettant à Windows?

mise à jour: l'ensemble des caractères autorisés par Windows est également déterminé par le système de fichiers sous-jacents et d'autres facteurs. Il y a un qui explique cela plus en détail.



12
votes

Les caractères : et " sont également utilisés dans les chemins. Colon est le délimiteur d'unité d'entraînement et les guillemets sont utilisés lorsque des espaces font partie d'un dossier ou d'un nom de fichier .

Les charactes * et ? sont utilisés comme caractères génériques lors de la recherche de fichiers.

Les caractères << / code> et > sont utilisés pour rediriger l'entrée et la sortie d'une application vers et depuis un fichier.

Le caractère | est utilisé pour la sortie de la tuyauterie d'une application en entrée d'une autre application.

Je choisirais le caractère de tuyau pour séparer les noms de fichiers. Il n'est pas utilisé dans les chemins et sa forme a une qualité de séparation naturelle.

Une alternative pourrait être d'utiliser XML dans la chaîne. Il y a un peu de frais généraux et certains caractères ont besoin d'un codage, mais l'avantage est qu'il peut gérer tous les caractères et le format est explicatif et bien défini.


6 commentaires

" n'est pas autorisé dans un chemin: il est considéré comme un délimiteur qui entoure un chemin lorsqu'il contient des caractères spéciaux, mais cela ne fait pas partie du chemin.


@Adrien: C'est certainement. Il peut être utilisé autour de tout le chemin ou autour d'un élément dans un chemin, comme C: \ "Fichiers du programme" \ Adobe.


@guffa: J'insiste, n'est pas. Les doubles qoutes sont utilisées comme moyen pour échapper à un caractère spécial, des espaces à préciser. Ils sont particulièrement interprétés par Windows Shell et Invite de commande, mais ne font pas partie du nom de fichier. Pouvez-vous me montrer un moyen de créer un fichier dont le nom contient des guillemets doubles, à l'aide de l'invite de commande ou de l'API Windows?


@Adrien: Un nom de fichier ne contient pas de marques de quoation, et je n'ai jamais dit qu'ils le font. Un chemin peut contenir des guillemets utilisés pour spécifier les composants du trajet, tout comme le colon et les backslashes sont utilisés dans un chemin d'accès pour séparer les composants, bien qu'un nom de fichier ne contienne jamais de côlon ou d'une barre oblique inverse.


Eh bien, désolé pour l'obstination, je n'y ai jamais pensé de cette façon, mais vous avez vraiment raison.


NTFS utilise également : pour les flux.



0
votes

Pourquoi n'utilisez-vous aucun caractère avec une combinaison de touches Alt comme ‡ (alt + 0135) comme délimiteur?


1 commentaires

C'est un caractère légal des noms de fichiers et ne peut être utilisé comme séparateur pour cette raison.



1
votes

J'ai utilisé * dans le passé. La raison de la portabilité à Linux / Unix. True, techniquement, il peut également être utilisé sur ces fichiersysystems. En pratique, tous les systèmes d'exploitation courants l'utilisent comme une faute générique, c'est donc assez rare dans les noms de fichiers. En outre, les personnes ne sont pas surprises si les programmes rompent lorsque vous mettez un * dans un nom de fichier.


0 commentaires

8
votes

Windows utilise le point-virgule sous forme de nom de fichier de fichier de fichier: ; . Regardez la variable d'environnement de chemin, elle est remplie de ; entre les éléments de chemin.

(aussi, en python, le os.path.pathsep renvoie ";" , alors qu'il se développe à " sur UNIX )


3 commentaires

Etrange, cependant, que je puisse créer des fichiers avec des points-virgules.


c'est étrange, mais c'est comme ça que c'est ... lorsque vous ajoutez un chemin qui contient un ";" au% de path%, le chemin ajouté est entouré de " (qui n'est pas autorisé dans un Chemin). Peut-être qu'ils entourent des noms de fichiers avec " et les séparant avec ; est votre solution.


Si vous entourez les noms de fichiers avec ", vous pouvez utiliser presque tout autre caractère comme délimiteur, tel qu'une virgule de la virgule. Ensuite, vous pouvez utiliser une routine de lecture CSV commune pour analyser la chaîne dans un tableau.



0
votes

Si tout ce dont vous avez besoin est l'apparence d'un côlon et la créera de manière programmative, pourquoi ne pas utiliser de caractère UTF-8 qui juste a l'air comme un Colon?

Mon premier choix serait la lettre de modificateur (U + A789), car il s'agit d'un caractère typique de RTL et apparaît beaucoup comme un côlon. C'est ce que j'utilise lorsque j'ai besoin d'une date d'heure complète dans le nom de fichier, tel que file_2017-05-04_16꞉45꞉22_clientno.jpg

Je resterais à l'écart des personnages comme la ponctuation hébreuse SOD PASUQ (U + 05C3), car il s'agit d'un caractère LTR et peut gâcher comment un système aligne le nom de fichier lui-même.


0 commentaires