2012-07-27 1 views
7

Pythonのある期間に終了するファイル名はどのように処理されますか? MSDNのサイトによると、このようなファイル名はWindowsでは有効ですが、Pythonでファイル名を作成しようとすると、最終的な期間が削除されます。私はos.openで未処理のファイル記述子を作成しようとしましたが、まだピリオドは削除されています。ファイル名およびディレクトリ内のスペースやドットについてHere is the exact quoteWindowsで末尾のファイル名を作成するにはどうすればよいですか?

は例えば、これは単に

os.open('test.', os.O_CREAT | os.O_WRONLY, 0777) 

編集 'testを' という名前のファイルを作成します。制限はWindowsシェルでは であり、WindowsまたはNTでは制限されません。 'bash'を使用すると、 ファイルの先頭と末尾に空白(またはドット)を含むファイルを作成してファイル名を付けることができます。エクスプローラでこれらのファイルを一覧表示して開くことができます。 シェル(cmd.exe)でそれらを '一覧表示'できますが、必ず をシェルから開くことはできません(特に末尾のスペースと ドット)。

+2

あなたはピリオドで終わるファイル名が有効であると言うMSDNの記事へのリンクを提供していただけます。これはウィキペディアで見られるものです:「Win32 APIは、UNCパスが使用されている場合を除いて、ファイル名から末尾のスペースとピリオド(完全停止)文字を取り除きます」(http://en.wikipedia.org/wiki/Filename) – sateesh

+0

Windowsのファイル名に末尾のファイルを作成しようとしましたか?作成されません。名前の変更後、 'test'ではなく 'test'として表示されます。私はそれがPythonではないウィンドウと関係していると信じています。 –

+0

@サテシエ私はリンクを追加しました。 – Antimony

答えて

6

私はこれを行う方法を理解しました。通常のファイル名を渡すと、Cから直接Win APIを呼び出すときにもピリオドが削除されます。奇妙なファイル名を作成するには、接頭辞\\?\を使用する必要があります(相対パスとスラッシュ変換も無効になります)。

open('\\\\?\\C:\\whatever\\test.','w') 

醜いですが移植性がありませんが、動作します。

+1

これは、Win32 APIとNTFSの機能の違いです。 Win32 APIは、名前+拡張子でファイル名を区切っており、NTFSはそれほど気にしませんが、そのための処理がたくさんあります。 '\\?\ 'シーケンスは、ほとんどのWin32 APIで特別な処理を無効にし、ファイル名をNTFS APIに直接転送するため、Win32 APIが通常防止することができます。 通常のアプリケーションとして、あなたはうまくプレイしてWin32に準拠するはずです。 – Oliver

0

Windowsはファイル名と空白の拡張子の間の区切り文字であると仮定して最終的な末尾の期間を削除します。 2つのピリオドを使用してください。

4

\\?\構文もcmd.exeで動作します:

dir>"\\?\C:\whatever\test." 
関連する問題