ファイル名に使用できる文字


138

オペレーティングシステムに応じて、ファイル名に使用できる文字のリストはどこにありますか?(Linuxでは、文字:はファイル名で許可されていますが、Windowsでは許可されていません)


.NETはその情報をWindowsに提供します。
Leppie、2011年


8
@kreker質問はAndroidに関するものであることに注意してください
congusbongus 2013


回答:


106

ウィキペディアのファイル名ページから始める必要があります。適切なサイズのテーブル(ファイル名制限の比較)があり、非常に多くのファイルシステムの予約文字が一覧表示されています。

また、MS-DOS などで予約されているファイル名など、各ファイルシステムに関する他の情報も多数ありますCON。私は私が私が短縮ときたら、それにかまれたという理由だけで、ファイルが含まれていることを言及const.hするcon.hと、コンパイラがハング理由を考え出す時間半を過ごしました。

DOS デバイスの拡張機能を無視することcon.hが判明したためcon、これは入力コンソールとまったく同じでした(もちろん、コンパイラーは、ヘッダーファイルに入力するのを待つので、続行しました)。


4
Wikipediaのページはややあいまいで混乱しているようです。たとえば、「一部のオペレーティングシステムでは特定の文字が禁止されています...」私は実際に、許可されている文字と許可されていない文字をすべてリストした完全な表を探しています。
pythonの男

7
@python、そのテーブルを見てはいけません。その下にある大きなhonkin 'を見てください(「ファイル名の制限の比較」というタイトル)。それがありますないその内容にとても漠然としました。
paxdiablo

52
おそらくあなたが必要とするすべてPOSIX "Fully portable filenames"はこれらをリストするエントリーを見ることです:A–Z a–z 0–9 . _ -
Vladimir Kornea


1
@CpILL OSは、Windows、OSX、Linux以外にもあります。非常にシンプルなファイルシステムを備えているOSもあります。
エレガントなサイコロ

32

OK、メインプレーヤーのファイルシステムのみに関心がある場合は、ファイルシステムの比較を見てください。

以外のすべてのバイトをしてNUL\/:*"<>|とあなたは、ファイル/フォルダを持つことはできませんが呼び出さない...と(もちろん)何の制御文字。


7
これは正しくありません。Linuxでは許可されていません/。Windowsでは、バックスラッシュと一部の文字列(例:)は許可されていませんCON
kgadek 2017年

7
ええ、それゆえ私は除いて言った。
CpILL 2017年

2
Mac(HFS +を実行)では:、名前にsを含むファイルを作成できます。
erwaman 2017年

これは正しくありません。Windowsが許可しないその他の文字については、この回答を参照してください。
mbomb007 2017年

Windowsもコントロール文字を許可しません(ただし、MacではNULを
除きます

23

Windows OSでは、ファイルを作成し、ファイル\名のように無効な文字を付けます。その結果、ファイル名に無効な文字がすべて含まれているポップアップが表示されます。

ここに画像の説明を入力してください


5

/FinderでのMac OS X(現在はMacOSと呼ばれます)の詳細について:は、Unixファイルシステムで解釈されます。

これは、AppleがClassic Mac OSから移行したときの下位互換性のために行われました。

/Finderでファイル名にa を使用して、ターミナルで同じファイルを表示すると、それがで表示されます:

あなたが使用することはできません。そして、それはあまりにも他の方法で回避します/ターミナルでファイル名ではなく、:OKであり、以下のように表示されます/ファインダーインチ

一部のアプリケーションは、より制限的で、混乱を避けるため、または以前のクラシックMac OSからのロジックを保持したり、プラットフォーム間の名前の互換性のために両方の文字を禁止したりする場合があります。


0

「英語ロケール」ファイル名の場合、これはうまく機能します。アップロードしたファイル名のサニタイズにこれを使用しています。ファイル名は、ディスク上の何かにリンクされることを意図したものではありません。ファイルがダウンロードされているときのためのものであり、パスのチェックはありません。

$file_name = preg_replace('/([^\x20-~]+)|([\\/:?"<>|]+)/g', '_', $client_specified_file_name);

基本的には、Windowsおよびその他のOSのすべての印刷不可および予約済み文字を削除します。パターンを簡単に拡張して、他のロケールや機能をサポートできます。


-1

Pythonでファイル名をクリーンアップするコードは次のとおりです。

import unicodedata

def clean_name(name, replace_space_with=None):
    """
    Remove invalid file name chars from the specified name

    :param name: the file name
    :param replace_space_with: if not none replace space with this string
    :return: a valid name for Win/Mac/Linux
    """

    # ref: https://en.wikipedia.org/wiki/Filename
    # ref: /programming/4814040/allowed-characters-in-filename
    # No control chars, no: /, \, ?, %, *, :, |, ", <, >

    # remove control chars
    name = ''.join(ch for ch in name if unicodedata.category(ch)[0] != 'C')

    cleaned_name = re.sub(r'[/\\?%*:|"<>]', '', name)
    if replace_space_with is not None:
        return cleaned_name.replace(' ', replace_space_with)
    return cleaned_name

2
コードは無効な(予約された)名前をチェックせず、replace_space_withの無効な文字もチェックしません。ファイル名の長さが範囲外です。したがって、:return: a valid name for Win/Mac/Linuxすべての状況に当てはまるわけではありません。
2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.