この関数ならば、32767文字程度のパスまで作れるはずだ。やってはいない。

コード

FILE* wfopen (std::wstring fname, std::wstring opt) {
int flg, att;
std::wstring fn=fullpath( fname );
att = GetFileAttributesW(&fn[0]);
if(att==-1) { if( opt[0]==L'r' ) return NULL; else att=0; }
if(opt[0]==L'a' || opt[0]==L'r' ) flg=OPEN_ALWAYS; else flg=CREATE_ALWAYS;
HANDLE hd=CreateFileW( &fn[0], GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ , NULL , flg , att , NULL);
return _wfdopen( _open_osfhandle ( (intptr_t)hd, 0 ), &opt[0] ); }