web-dev-qa-db-ja.com

ファイルシステムの制限より短いファイル名に対してPythonが「OSError:[Errno 36]ファイル名が長すぎます」と表示されるのはなぜですか?

次のコードは、予期しない例外を生成します。

open("52bbe674cdc81d4140099b84fa69eea4249bcceee75bcbe4838d911ab076547cfdad3c1c5197752a98e5525fe76613dbe52dcdb1a9a397669babce0f101d010142cffa000000.csv", "w")
OSError: [Errno 36] File name too long: '52bbe674cdc81d4140099b84fa69eea4249bcceee75bcbe4838d911ab076547cfdad3c1c5197752a98e5525fe76613dbe52dcdb1a9a397669babce0f101d010142cffa000000.csv'

私のファイルシステムは(ウィキペディアによると)255バイトのファイル名制限があるext4であるため、これは予想外のことです。上記のファイル名の長さは144です。

では、ファイル名の長さの制限を実際に超えていないのに、なぜPythonはこの例外を発生させるのですか?

9
Josh Hansen

私は解決策を見つけました。私は純粋なext4を扱っていないことがわかりました-それは実際にはext4の上に階層化されたecryptfsであり、以前のUbuntuインストールから引き継がれています。 この関連する質問 に対する受け入れられない回答で示唆されているように、ecryptfsレイヤーはファイル名の長さに143文字の制限を課します。 ecryptfsの下でのファイル名の長さの制限に対する決定的な答えは ここ にあります。

14
Josh Hansen