Форум: "Начинающим";
Текущий архив: 2010.12.19;
Скачать: [xml.tar.bz2];
ВнизДлина файла с путем больше 260 байт Найти похожие ветки
← →
Darvin (2010-09-22 16:40) [0]Здравствуйте, коллеги!
Появилась проблема. Нужно создать файл на машине, длина имени которого с путем превышает 260 байт.
Если пишу:
AssignFile(F, FN);
Rerwrite(F);
Close(F);
Файл создается с урезанным именем.
Если пишу:
H := FileCreate(FN);
FileWrite(H, H, 1);
FileClose(H);
файл не создается
Если пытаюсь создать файл в проводнике - обрезает имя.
Если пытаюсь создать файл в фаре - пишет, что буфер, размещенный под имя файла слишком мал.
Если создать, уменьшив путь - создается.
Как обойти эту проблему и создать файл с длинным именем?
← →
MBo © (2010-09-22 16:51) [1]In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which is defined as 260 characters.
The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. This type of path is composed of components separated by backslashes, each up to the value returned in the lpMaximumComponentLength parameter of the GetVolumeInformation function (this value is commonly 255 characters). To specify an extended-length path, use the "\\?\" prefix. For example, "\\?\D:\<very long path>". (The characters < > are used here for visual clarity and cannot be part of a valid path string.)
← →
Darvin (2010-09-22 16:55) [2]MBo, Спасибо большое, буду разбираться :-)
← →
12 © (2010-09-22 16:57) [3]
> use the "\\?\" prefix
попробовал - не хочет, слишком большое имя пишет и все
как делал
cmd
copy 1.txt \\?\1234567890123456..90123
← →
RWolf © (2010-09-22 17:53) [4]Use FAR, Luke!
← →
Anatoly Podgoretsky © (2010-09-22 19:02) [5]Для начала надо отказаться от FileCreate это не Юникод функция, использовать надо использовать CreateFile
← →
MBo © (2010-09-23 05:56) [6]каждый кусок пути файла между слэшами не должен превосходить по длине вышеуказанную величину "lpMaximumComponentLength parameter of the GetVolumeInformation".
У меня на диске с ntfs это 255. Т.е., видимо, можно создать вложенную структуру директорий с именами каждой до 255, и суммарным длинным путем.
А зачем вообще понадобилось такое?
← →
han_malign (2010-09-23 08:31) [7]
> надо использовать CreateFile
- CreateFileW
← →
Ega23 © (2010-09-23 08:41) [8]
> CreateFileW
Не обязательно, оно один фиг к юникоду внутри приводится.
← →
han_malign (2010-09-23 08:48) [9]
> Не обязательно, оно один фиг к юникоду внутри приводится.
- в D5? зажрались вы с новомодными студиями... и тогда уж не юникод, а OleString...
← →
RWolf © (2010-09-23 09:18) [10]и всё же — FAR. Судя по теме, автору важно создать файл, а не написать для этого код.
← →
Ega23 © (2010-09-23 10:02) [11]
> - в D5? зажрались вы с новомодными студиями... и тогда уж
> не юникод, а OleString...
При чём тут Delphi???
HANDLE
WINAPI
CreateFileA(
LPCSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
)
/*++
Routine Description:
ANSI thunk to CreateFileW
--*/
{
PUNICODE_STRING Unicode;
Unicode = Basep8BitStringToStaticUnicodeString( lpFileName );
if (Unicode == NULL) {
return INVALID_HANDLE_VALUE;
}
return ( CreateFileW( Unicode->Buffer,
dwDesiredAccess,
dwShareMode,
lpSecurityAttributes,
dwCreationDisposition,
dwFlagsAndAttributes,
hTemplateFile
)
);
}
Кстати, OleString чё-та тоже не вижу
← →
12 © (2010-09-23 10:10) [12]:)
5023 г. Энциклопедия, собранная из кусочных сведений, случайно уцелевших после Второго Глобального Крушения.
FAR - способ древних, не хотящих писать код, создавать файлы длинной > 260 байт.
Общеизвестно, что жизненной необходимостью древних являлось, периодическое создание файлов длинной > 260 байт, предположительно, раз в неделю (в брачный период - до раза в сутки).
Возможные значения -
(1. Инициалы фирмы-производителя домашних роботов по созданию файлов длинной > 260 байт )
(2. Сокращение до первых букв фразы с просьбой создать файлы длинной > 260 байт, обращенной к тому, кто это умеет )
(3. Неприличное ругательство )
(4. Приличное ругательство )
← →
RWolf © (2010-09-23 10:16) [13]
> 12 © (23.09.10 10:10) [12]
сабж не про имя файла, а про путь к нему.
← →
han_malign (2010-09-23 13:09) [14]
> Ega23 ©
> ANSI thunk to CreateFileW
- уел... только надо все же ссылку на источник давать, чтобы люди в отладчик не лезли...
← →
Ega23 © (2010-09-23 13:52) [15]
> только надо все же ссылку на источник давать, чтобы люди
> в отладчик не лезли...
Я бы рад бы. Но - не могу. :(
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.12.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c