HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1113
とおりすがりdirlist命令で許容するファイル名の最大文字数について3解決


とおりすがり

リンク

2017/11/13(Mon) 00:40:58|NO.81835

 現在、(パスを含めない)ファイル名が260バイトを超える項目がディレクトリ内にあると、「dirlist tmp,"*.*",0」命令が失敗してしまっているようです。(statの値がおかしいです。)

 windowsにおけるファイル名の制限に「ディレクトリ名を含まないファイル名が260バイトまで」といったものはなく、「ドライブレターから数えてフルパスが260文字まで」という制限のみなはずです。
 当方のwindows10環境ではExprolerなどでは(ドライブルートなどディレクトリ名に当たる部分が短い場所でなら)問題なく全角文字を使って250文字500バイトのファイル名を付ける事ができるようです。

 以上を踏まえ、この不可思議な制限は撤廃できないのでしょうか。



この記事に返信する


kanahiron

リンク

2017/11/13(Mon) 01:25:08|NO.81836

HSPの命令dirlistが内部で呼び出しているWinAPIのFindFirstFileなどはMAX_PATHで制限がかかっていますので不可思議でもなんでもないですよ
https://msdn.microsoft.com/ja-jp/library/cc429233.aspx?f=255&MSPPError=-2147217396
上記関数では結果がWIN32_FIND_DATAという構造体に書き込まれますが、そのWIN32_FIND_DATA構造体を見ると
https://msdn.microsoft.com/ja-jp/library/windows/desktop/aa365740(v=vs.85).aspx
TCHAR cFileName[MAX_PATH];から分かる通り、結果はMAX_PATHで制限されます
直接呼び出して確認しましたが、結果はフルパスではなくファイル名単体で返されましたのでファイル名が260字を超えてもNGとなります

この制限を無くすには、Unicode版の関数を呼び出して下さい
また、HSP3utfも現時点ではMAX_PATHを260と定義していますのでHSP3utfランタイムを使用しても無意味です。
属性の指定などは面倒なので最低限のサンプルですと

#include "kernel32.as" #define MAX_PATH 32767//これは文字数でバイト数では無いので注意 #define INVALID_HANDLE_VALUE -1 sdim LPWIN32_FIND_DATA, 11*4+(MAX_PATH*2)+14+2 sdim findFileName, (MAX_PATH*2)+1 filename = "\\\\?\\\\C:\\Windows\\*.*" FindFirstFileW filename, varptr(LPWIN32_FIND_DATA) hFind = stat if (hFind == INVALID_HANDLE_VALUE): dialog "1つもファイルが見つかりませんでした" repeat memcpy findFileName, LPWIN32_FIND_DATA, (MAX_PATH*2), 0 ,44 findFileName = cnvwtos(findFileName) mes findFileName FindNextFileW hFind, varptr(LPWIN32_FIND_DATA) if (stat == 0): break loop FindClose hFind stop
これで恐らく260字以上のファイル名(フォルダ名)も検索できます。試していないので出来なかったらすみません



科学太郎

リンク

2017/11/14(Tue) 17:53:29|NO.81844

・ディレクトリのファイル一覧で取得の不具合発見!!
http://hsp.tv/play/pforum.php?mode=pastwch&num=74545

どうぞ。



吹雪

リンク

2017/11/16(Thu) 10:46:58|NO.81849

kanahiron
>> kanahiron 様

 わざわざ実験していただき、ありがとうございます。
 仕方がないので、自分でDLLをたたく事にします。

>> 科学太郎 様

 既に報告済みだったんですね。
 早く修正されるとよいのですが、このあいだ3.5正式版のリリースがあったのに修正されていないという事は、望み薄なんですかね。



ONION software Copyright 1997-2018(c) All rights reserved.