プロが教えるわが家の防犯対策術!

MAX_PATHは260固定なのに、関数によって異なる理由を教えてください。

CreateFileは259文字まで、それ以上は関数が失敗します。
MakeSureDirectoryPathExistsは248文字まで、それ以上は関数が失敗します。
renameは220文字まで、それ以上は関数が失敗します。

A 回答 (6件)

さ~て、これは何の話なんでしょうか?

    • good
    • 0
この回答へのお礼

すみません、
「何文字まで」とはファイルを保存する時の場所のフォルダーパス名とファイル名の文字数を合わせて「何文字まで」と表しています。

お礼日時:2019/03/15 14:17

MAX_PATHの値は、少なくとも140以上にしなければならないとか...


ってことは、固定じゃない。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
主旨はMAX_PATHはファイル名を含めたパス文字数が260字までは許可さてれいるのですが、
ファイル作成時は259文字まででそれ以上はファイル作成が失敗します。
多重構造のフォルダー作成時は248文字までそれ以上はフォルダーが出来ません。
リネームは220文字までそれ以上のパス文字ではリネームが失敗します。
MAX_PATHの定義はファイル作成のトータルの文字数が260となっているにも関わらず
ファイル作成時、フォルダー作成時、リネームではどうして260文字使えないのかの質問です。
よろしくお願いします。

お礼日時:2019/03/15 20:13

昔のファイルシステム(FAT)ではパス名の最長が255文字に制限されていました。


それに、ドライブレター等(C:¥)3文字とファイル名(8+3)の間のピリオド1文字で
255+3+1=259文字が最長パスです。
さらに、C言語で作成されたライブラリでは、
文字列の末尾にはNull文字(0x00)を付ける約束になっています。
それを含めて、MAX_PATH=260 となっています。
今どきのファイルシステム(NTFS)とはかなり違いますよね。
そんな訳で、時代とともに移り変わるシステムの中身が、
統一が取れているはずと思う方がおかしい。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
MAX_PATHを使うシュツエーションが違っていると言うことでしょうか?
ファイルシステムの時代の変化があっても、ファイル作成時には現在も260文字まで使えるようです。
なのに何故、MakeSureDirectoryPathExistsやrenameの時のファイルパスの文字数が260字まで使えないのでしょうか?
よろしくお願いします。

お礼日時:2019/03/15 21:35

本当はこんなところで聞く話じゃないと思うけどなぁ....



さておき, 具体例はありますか?
    • good
    • 0
この回答へのお礼

毎度お世話になります。
具体例はかなりの行数になりますから、イメージでお願いします。

CreateFile(フルパス+名前(259字までOK)・・・)
MakeSureDirectoryPathExists(C:\試験\TEST\test.txt(248字までOK))
rename(C:\試験\TEST\test.txt, D:\試験\TEST\test.txt(220までOK))

実際のソースでもこれと同等だとお考えください。

お礼日時:2019/03/16 08:39

>関数によって異なる理由



システムは日々進化しているのに、
個々の関数はそれが作られた当時の仕様のままだから。

関数自体の仕様を変更すると、
その影響による不具合がどこで出るか判らないので、
新しい関数を作ってしまう。

で、古い関数の仕様は置き去りにされる。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
今や260文字は意味を持たない定数となったのですね。
できれば、ファイル名を含まないパス名の許容文字数を教えてください。
でも今それが解っても、将来変更の可能性もありうることだと思います。
解決策としては、実際に多重のフォルダーを作ってみてエラーがでた時解決する以外に完全な解決方法はないように思います。
ありがとうございました。

お礼日時:2019/03/16 08:28

手元だと


rename("c:\\tmp\\0123456789 (あと 22回くりかえす).txt", "c:\\tmp\\abcdefghij (あと 22回くりかえす).txt");
でちゃんとファイル名が変わってる.
    • good
    • 0
この回答へのお礼

どうも原因は文字数制限ではなく、別の所がかかわっているようです。
すこし整理してみます。
ありがとうございました。

お礼日時:2019/03/17 08:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!