Длинные имена файлов - где реальность?
От: mmmaloy Германия  
Дата: 16.08.04 22:55
Оценка:
Привет. Короче кто подскажет, сколько знаков может иметь максимум в реала имя фала/папки
У меня проблемы со следующим кодом
wstring VollFileNameOrig;
wstring VollFileNameBild;

if (!MoveFileEx(VollFileNameOrig.c_str(), VollFileNameBild.c_str(), NULL))
{
    dwError = GetLastError();
                
    return dwError;
}


Выдает ошибку, когда имя больше(не знаю точно) 300 знаков, да еще по алгоритму новое имя в три раза длиннее 900. Ошибка: dwError = 3.
По мсдн можно до около 32000 знаков в имени с поддержкой уникоде и WinXP. Так что где реальность?
Длинные имена файлов - где реальность?
От: Alex Fedotov США  
Дата: 16.08.04 23:50
Оценка: 13 (2) +2
#Имя: FAQ.winapi.longfilenames
M>Выдает ошибку, когда имя больше(не знаю точно) 300 знаков, да еще по алгоритму новое имя в три раза длиннее 900. Ошибка: dwError = 3.
M>По мсдн можно до около 32000 знаков в имени с поддержкой уникоде и WinXP. Так что где реальность?

Там надо специальным образом имена файлов записывать, чтобы можно было использовать "длинные" длинные имена:
\\?\C:\Folder1\Folder2\file.ext
-- Alex Fedotov
Re: Длинные имена файлов - где реальность?
От: mmmaloy Германия  
Дата: 17.08.04 13:20
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

AF>Там надо специальным образом имена файлов записывать, чтобы можно было использовать "длинные" длинные имена:

AF>\\?\C:\Folder1\Folder2\file.ext

Именно так я и записываю, и вот некоторая уточненная информация. Привер работает только для до 260 знаков в имени файла. Т.о. следуя моему алгоритму, у меня 260/3, а это около 80 знаков, ограничение на длину файла. Мало.
Re[2]: Длинные имена файлов - где реальность?
От: Privalov  
Дата: 17.08.04 13:54
Оценка: 12 (1)
Здравствуйте, mmmaloy, Вы писали:

M>Здравствуйте, Alex Fedotov, Вы писали:


AF>>Там надо специальным образом имена файлов записывать, чтобы можно было использовать "длинные" длинные имена:

AF>>\\?\C:\Folder1\Folder2\file.ext

M>Именно так я и записываю, и вот некоторая уточненная информация. Привер работает только для до 260 знаков в имени файла. Т.о. следуя моему алгоритму, у меня 260/3, а это около 80 знаков, ограничение на длину файла. Мало.


Это на NTFS в UNICODE до 32000 символов. Если я не ошибаюсь, в остальных случаях — 256.
Re[3]: Длинные имена файлов - где реальность?
От: mmmaloy Германия  
Дата: 17.08.04 14:18
Оценка:
Здравствуйте, Privalov, Вы писали:

P>Это на NTFS в UNICODE до 32000 символов. Если я не ошибаюсь, в остальных случаях — 256.


Согласен. Это было учтно. Все равно функция MoveFileEx не работает
Re[2]: Длинные имена файлов - где реальность?
От: Denis Россия http://blogs.gotdotnet.ru/personal/Denis
Дата: 17.08.04 14:29
Оценка:
M>Именно так я и записываю, и вот некоторая уточненная информация. Привер работает только для до 260 знаков в имени файла. Т.о. следуя моему алгоритму, у меня 260/3, а это около 80 знаков, ограничение на длину файла. Мало.
Совершенно дурацкий вопрос, а какую версию функции вы используете, Unicode или нет?
Re[3]: Длинные имена файлов - где реальность?
От: mmmaloy Германия  
Дата: 17.08.04 14:51
Оценка:
Здравствуйте, Denis, Вы писали:

D>Совершенно дурацкий вопрос, а какую версию функции вы используете, Unicode или нет?


Вообщето использую диррекиву _UNICODE, попробовал напрямую MoveFileExW — результат один
Я уже думаю, что .c_str() — мне имя файла режет. Ща гляну
Re: Длинные имена файлов - где реальность?
От: Kozyrevsky Россия  
Дата: 17.08.04 14:56
Оценка: 15 (2)
Здравствуйте, mmmaloy, Вы писали:

M>Привет. Короче кто подскажет, сколько знаков может иметь максимум в реала имя фала/папки

M>По мсдн можно до около 32000 знаков в имени с поддержкой уникоде и WinXP. Так что где реальность?

Если почитать MSDN повнимательней , то можно увидеть следующее:

The Unicode versions of several functions permit paths that exceed the MAX_PATH length if the path has the "\\?\" prefix. [...] However, each component in the path cannot be more than MAX_PATH characters long.


То есть весь путь целиком может быть до 32000 знаков, а вот каждая из его компонент, в том числе и имя файла — не больше MAX_PATH
Re[2]: Длинные имена файлов - где реальность?
От: mmmaloy Германия  
Дата: 17.08.04 15:06
Оценка:
Здравствуйте, Kozyrevsky, Вы писали:

K>То есть весь путь целиком может быть до 32000 знаков, а вот каждая из его компонент, в том числе и имя файла — не больше MAX_PATH


Большое тебе сердечное спасибо
Теперь все на своих местах, а то че то не сходилось у мя в голове.
Когда нибудь надо на ангицкий подналеч
Re[2]: Длинные имена файлов - где реальность?
От: Alex Fedotov США  
Дата: 17.08.04 16:56
Оценка: 1 (1) +1
Здравствуйте, Kozyrevsky, Вы писали:

K>Если почитать MSDN повнимательней , то можно увидеть следующее:


K>

K>The Unicode versions of several functions permit paths that exceed the MAX_PATH length if the path has the "\\?\" prefix. [...] However, each component in the path cannot be more than MAX_PATH characters long.


K>То есть весь путь целиком может быть до 32000 знаков, а вот каждая из его компонент, в том числе и имя файла — не больше MAX_PATH


Что, кстати, не совсем соответствует действительности. Максимальная длина компоненты пути определяется функцией GetVolumeInformation и, вообще говоря, зависит от файловой системы. При этом VFAT и NTFS возвращают 255, а не MAX_PATH=260.
-- Alex Fedotov
Re[3]: Длинные имена файлов - где реальность?
От: Stanky  
Дата: 17.08.04 21:24
Оценка:
> При этом VFAT и NTFS возвращают 255, а не MAX_PATH=260.
>
Эт максимальная длина имени компоненты, а вот максимальная длина пути именно 260 (когда-то очень давно это проверял)!!!
Posted via RSDN NNTP Server 1.9 beta
Не бойся выглядеть глупо, от этого ты выглядишь ещё глупей!!!
Re[3]: Длинные имена файлов - где реальность?
От: Kozyrevsky Россия  
Дата: 18.08.04 08:44
Оценка:
Здравствуйте, Alex Fedotov, Вы писали:

AF>Что, кстати, не совсем соответствует действительности. Максимальная длина компоненты пути определяется функцией GetVolumeInformation и, вообще говоря, зависит от файловой системы. При этом VFAT и NTFS возвращают 255, а не MAX_PATH=260.


Да действительно, на практике получается 255(NTFS), но я лишь процитировал MSDN.

Кстати в ходе экспирементов выяснилась интересная особенность: проводник не может удалить файл с именем ровно 255 символов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.