Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.49 MB
Время: 0.005 c
15-1284034531
kirat
2010-09-09 16:15
2010.12.19
Кросс-отчет в FastReport


2-1285421559
Первокурсница
2010-09-25 17:32
2010.12.19
Одна кнопка работает, другая нет (добавление записей в БД)


11-1226307025
Dy1
2008-11-10 11:50
2010.12.19
работа с Юникодом


15-1284064172
Юрий
2010-09-10 00:29
2010.12.19
С днем рождения ! 10 сентября 2010 пятница


2-1285509430
monxxie
2010-09-26 17:57
2010.12.19
Обработка Invalid use of keyword





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский