[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[port139ml:02616] Re: NTFS ファイル名長の限界 (Re: Re: TASKの UTF-8 patch)
- To: port139ml@xxxxxxxxxxxxx
- Subject: [port139ml:02616] Re: NTFS ファイル名長の限界 (Re: Re: TASKの UTF-8 patch)
- From: Yoji AOKI <yjaoki@xxxxxxxxxxxxxxxx>
- Date: Thu, 06 Mar 2003 11:18:53 +0900
青木です。
At 09:08 03/03/06 +0900, Hideaki Ihara wrote:
>Port139 伊原です。
おはようございます。
>echo で作成した場合、最大長は 265文字まで作成可能なんですかね?
>ストリームを含めるとなぜか 263文字までしか作成できてないです。
>手元で成功している echo でのパターンと最大長を以下のファイル
>に cat&past してあります。
>
>http://www.port139.co.jp/task/longfilename.txt
最初の 265 文字というのが数えると 255 文字に見えるのですが、
私の数え間違いでしょうか?
確かに、コマンドラインやエクスプローラでは Windows API が
許容しているよりも少ないところで何やら制約があるようですね。
私が試したのは、プログラム上で Windows API (CreateFile) を
直接叩きました。但し
#define UNICODE
しないとうまくいかなかったりします。それと、
static WCHAR szLongLongName[] =
L"\\\\?\\C:\\TEMP\\あああああ .... ";
の形式で、なおかつ Full Path で指定しないといけないみたいです。
このときの限界が、
\\?\C:\TEMP\ああああ ... あああ.txt:いいいい ... いいい
← 255 文字 →:← 255 文字 →
でした。
もっと深い階層でやるとどうなるか? 時間があったら試してみます。
ところで Win32 API の FindFirstFile に渡す WIN32_FIND_DATA 構造体は
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD dwReserved0;
DWORD dwReserved1;
TCHAR cFileName[ MAX_PATH ];
TCHAR cAlternateFileName[ 14 ];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;
で、cFileName は MAX_PATH で長さが決めうちされてますね。
ということは API 的には MAX_PATH 以上は無い、という
前提でしょうか。
ところで、Visual C++ 6.0 SP5 な処理系使ってますが
MAX_PATH は 260 ってなっているみたいですが。。。
--
青木 洋二 (Yoji AOKI)
yjaoki@xxxxxxxxxxxxxxxx