2009-11-03 15 views
5

私はファイル名区切り文字を使用する文字を探しています(私は複数のファイル名を平文文字列に格納しています)。 Windowsがファイル名に:?*<>"|/\を許可していないようです。明らかに、\/は、パス内の何かを意味するため、使用できません。他の誰かが使用されるべきではない理由がありますか? /または\と同様に、他の許可されていない文字は、パス名に含まれていないと思われる特別な意味を持つ可能性があります。これらの他の7文字のうち、確実に安全であるか、またはこの目的のために使用するのは間違いなく危険ですか?コロン/アスタリスクをファイル名の区切り文字として使用しますか?

+0

なぜ自分で問題を作成するのですか?ダッシュ " - "やドット "のような一般的なものを使ってください。" – ghostdog74

+0

悪いニュースは:多くのUNIXシステムでは、ファイル名に許可されていない文字は "/"だけです。他のすべては有効です(シェルからシェルを隠すためにエスケープする必要があるかもしれませんが)。 –

+0

UNIXパスでは '/'を使用できます(ただし、これを行うと、あなたはSatanです)。あなたが使用できない唯一のものはnullです。 – ratbum

答えて

11

文字の:"もパスに使用されます。コロンはドライブ単位の区切り文字で、スペースはフォルダまたはファイル名の一部である場合は引用符が使用されます。

*?の文字は、ファイルを検索するときにワイルドカードとして使用されます。

文字の<>は、アプリケーションの入出力をファイルにリダイレクトするために使用されます。

文字|は、あるアプリケーションの出力を別のアプリケーションの入力に使用するために使用されます。

ファイル名を区切るためにパイプ文字を選択します。パスには使用されず、その形状は自然な分離品質を持っています。

代わりに、文字列にXMLを使用することもできます。オーバーヘッドがあり、エンコーディングが必要なキャラクタもありますが、どのキャラクタも処理できるという利点があり、フォーマットは自明であり、明確に定義されています。

+0

'' 'はパスには使用できません。特殊文字を含むパスを囲む区切り文字ですが、パスの一部ではありません。 –

+1

@Adrien:確かにそうです。 C:\ "Program Files" \ Adob​​eのようなパス内の要素やパス全体の要素のことです。 – Guffa

+0

@guffa:私は主張しますが、そうではありません。ダブルクォートは、特殊文字をエスケープするための手段として使用されます。 Windowsシェルとコマンドプロンプトによって特別に解釈されますが、ファイル名の一部ではありません。コマンドプロンプトまたはWindows APIを使用して、名前に二重引用符が含まれるファイルを作成する方法を教えてください? –

0

実際に\を除くすべての可能な文字でプログラムを使用してファイルを作成することは可能です。 (少なくとも、これは一度に当てはまり、その後Windowsがそのポリシーを変更した可能性があります)当然、特定の文字を含むファイルは他のものよりも扱いにくいでしょう。

Windowsで許可されている文字は何を決定するために使用しましたか?

更新:Windowsで許可されている文字のセットは、基礎となるファイルシステムなどによっても決定されます。これをより詳細に説明するblog entry on MSDNがあります。

+0

Windowsエクスプローラでファイルの名前を変更しようとすると、そのリストが表示され、実行を停止します。私はちょうどそれが基本的なレベルでそれのようだと思った - しかしそうではないと言っているのですか? – Smashery

+0

Explorerの下には多くのレイヤーがあります。 :)私はより多くの情報で私の答えを更新しました。 –

+0

次のことはしない:ファイルを異なるフォークに分割する...名前:テキスト、名前:データなど?そして、あなたはWindows上でファイル名にどのようにスラッシュを入れますか?私はそれがスラッシュとバックスラッシュをシステムコールレベルで同等に扱うという錯覚のもとにいる。 –

0

デリミタとして‡(Alt + 0135)のようなALTキーを組み合わせたキャラクタは使用しないでください。

+0

どのような文字コードですか? –

+2

これはファイル名の合法的な文字なので、その理由からセパレータとして使用することはできません。 – MSalters

1

これまで私は*を使用していました。 Linux/Unixへの移植性の理由。確かに、技術的にはそれらのファイルシステムでも使用できます。実際には、すべての一般的なOSはワイルドカードとしてそれを使用します。したがって、ファイル名ではまれです。また、*をファイル名に入れると、プログラムが中断しても驚くことはありません。

8

Windowsでは、セミコロンをファイル名の区切り文字として使用します。;。 PATH環境変数を見れば、パス要素間に;が入っています。

(また、Pythonで、os.path.pathsep戻り";"、それはUnixで":"に展開しながら)あなたが必要とするすべてのコロンの外観で、プログラム的にそれを作成する場合は

+0

奇妙なことに、セミコロンでファイルを作成することができます。 – Smashery

+0

それは奇妙ですが、それはそうです...%PATH%に ';'を含むパスを追加すると、追加されたパスは '' 'で囲まれます(これはパスでは許可されません)。ファイル名を '' 'で囲み、'; 'で区切ってファイル名を解決します。 –

+0

ファイル名を '' 'で囲むと、コンマなどの区切り文字として他のほとんどの文字を使用できます。次に、共通のCSV読み込みルーチンを使用して文字列を配列に解析できます。 –

0

、なぜしませんただと見えるUTF-8文字の使用はコロンのようですか?

Modifier Letter(U + A789)は一般的なRTL文字であり、コロンのように見えます。 file_2017-05-04_16꞉45꞉22_clientNo.jpg

私はそれがLTR文字であるため、ヘブライ句読点Sof Pasuq(U + 05C3)のような文字から離れています。混乱する可能性があります。システムがファイル名自体をどのように整列させるか。

関連する問題