[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