как пишет MSDN функция CreateFile принимает LPCTSTR lpFileName который может начинаться с символов "\\?\". в этом случае можно имя файла делать бОльшего, чем обычно размера. с другой стороны, если использовать такое имя открывая файл с помощью std::fostream, то ничего не выйдет -- fostream не понимает такого подхода.
есть ли встроенная возможность открывать файлы с такими именами с помощью fostream?
Re: CreateFile и fostream (как подружить fofstream с "\\?\")
M>как пишет MSDN функция CreateFile принимает LPCTSTR lpFileName который может начинаться с символов "\\?\". в этом случае можно имя файла делать бОльшего, чем обычно размера. с другой стороны, если использовать такое имя открывая файл с помощью std::fostream, то ничего не выйдет -- fostream не понимает такого подхода.
Там же написано, что такой подход к именам файлов поддерживается только в функции CreateFileW.
Т.е. если std::fostream в конце концов обратится к CreateFileA, то толку от такого имени не будет.
Re: CreateFile и fostream (как подружить fofstream с "\\?\")
Здравствуйте, mezhaka, Вы писали:
M>как пишет MSDN функция CreateFile принимает LPCTSTR lpFileName который может начинаться с символов "\\?\". в этом случае можно имя файла делать бОльшего, чем обычно размера. с другой стороны, если использовать такое имя открывая файл с помощью std::fostream, то ничего не выйдет -- fostream не понимает такого подхода.
M>есть ли встроенная возможность открывать файлы с такими именами с помощью fostream?
Вообще-то тут используется CreateFile, которой имя файла передается без изменений. Так что все, что можно CreateFile, можно ofstream::open.
Насчет длинного имени — ты не совсем прав. 32000 символов — это максимальная длина не имени, а пути. То есть можно вложить много папок, но длина отдельного имени больше 260 не будет.
With best regards
Pavel Dvorkin
Re[2]: CreateFile и fostream (как подружить fofstream с "\\?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, mezhaka, Вы писали:
M>>как пишет MSDN функция CreateFile принимает LPCTSTR lpFileName который может начинаться с символов "\\?\". в этом случае можно имя файла делать бОльшего, чем обычно размера. с другой стороны, если использовать такое имя открывая файл с помощью std::fostream, то ничего не выйдет -- fostream не понимает такого подхода.
M>>есть ли встроенная возможность открывать файлы с такими именами с помощью fostream?
PD>Вообще-то тут используется CreateFile, которой имя файла передается без изменений. Так что все, что можно CreateFile, можно ofstream::open.
PD>Насчет длинного имени — ты не совсем прав. 32000 символов — это максимальная длина не имени, а пути. То есть можно вложить много папок, но длина отдельного имени больше 260 не будет.
спасибо. проверил -- всё так, как ты написал.
Re[3]: CreateFile и fostream (как подружить fofstream с "\\?
PD>>Насчет длинного имени — ты не совсем прав. 32000 символов — это максимальная длина не имени, а пути. То есть можно вложить много папок, но длина отдельного имени больше 260 не будет.
M>спасибо. проверил -- всё так, как ты написал.
Это на FAT можно работать с именами до 260 символов включительно.
На NTFS только до 255 включительно.