CreateFile и fostream (как подружить fofstream с "\\?\")
От: mezhaka  
Дата: 03.04.08 18:55
Оценка:
как пишет MSDN функция CreateFile принимает LPCTSTR lpFileName который может начинаться с символов "\\?\". в этом случае можно имя файла делать бОльшего, чем обычно размера. с другой стороны, если использовать такое имя открывая файл с помощью std::fostream, то ничего не выйдет -- fostream не понимает такого подхода.

есть ли встроенная возможность открывать файлы с такими именами с помощью fostream?
Re: CreateFile и fostream (как подружить fofstream с "\\?\")
От: MShura  
Дата: 04.04.08 11:31
Оценка: +2 -1
M>как пишет MSDN функция CreateFile принимает LPCTSTR lpFileName который может начинаться с символов "\\?\". в этом случае можно имя файла делать бОльшего, чем обычно размера. с другой стороны, если использовать такое имя открывая файл с помощью std::fostream, то ничего не выйдет -- fostream не понимает такого подхода.
Там же написано, что такой подход к именам файлов поддерживается только в функции CreateFileW.
Т.е. если std::fostream в конце концов обратится к CreateFileA, то толку от такого имени не будет.
Re: CreateFile и fostream (как подружить fofstream с "\\?\")
От: Pavel Dvorkin Россия  
Дата: 04.04.08 12:23
Оценка: 3 (1)
Здравствуйте, 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 с "\\?
От: mezhaka  
Дата: 07.04.08 13:42
Оценка:
Здравствуйте, 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 с "\\?
От: MShura  
Дата: 07.04.08 14:35
Оценка: 8 (1)
PD>>Насчет длинного имени — ты не совсем прав. 32000 символов — это максимальная длина не имени, а пути. То есть можно вложить много папок, но длина отдельного имени больше 260 не будет.

M>спасибо. проверил -- всё так, как ты написал.


Это на FAT можно работать с именами до 260 символов включительно.
На NTFS только до 255 включительно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.