Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Windows [игнор отключен] [закрыт для гостей] / Как научить WinXP создавать файлы с длиной имени > 255 символов? / 25 сообщений из 28, страница 1 из 2
01.04.2008, 12:39
    #35226912
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Файловая система NTFS.
...
Рейтинг: 0 / 0
01.04.2008, 12:46
    #35226941
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
KhodФайловая система NTFS http://www.ixbt.com/storage/ntfs.html Максимальная длина имени файла - 255 символов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 12:47
    #35226948
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Привет, Khod!
Ты пишешь:

KhodK> Файловая система NTFS.интересно, зачем?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 12:47
    #35226950
DmGr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Сравнение
Написать свою NTFS (NewTFS :) )

А зачем такие длинные имена?
...
Рейтинг: 0 / 0
01.04.2008, 12:55
    #35226979
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Для сортировки книг в электронном варианте.
Неужели эти грабли неисправимы?
...
Рейтинг: 0 / 0
01.04.2008, 12:58
    #35226999
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Привет, Khod!
Ты пишешь:

KhodK> Для сортировки книг в электронном варианте.
K> Неужели эти грабли неисправимы?всю книгу запихнуть в имя файла?
неплохо.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 13:04
    #35227040
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Мимопроходящий
М> всю книгу запихнуть в имя файла?
М> неплохо.неплохо для 01.04 ?
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 13:08
    #35227054
DmGr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Может проще прогу состряпать, каталог книг (да и мне кажется есть такие :( )?

Приведите пример названия книги, длина которого более 255 символов, очень хочется посмеяться
...
Рейтинг: 0 / 0
01.04.2008, 13:11
    #35227064
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Карабас Барабас KhodФайловая система NTFS http://www.ixbt.com/storage/ntfs.html Максимальная длина имени файла - 255 символов.
Статья хорошая, но с ошибками, я посмотрел только по части имен. Во первых длина для ANSI = 260 символов, а для Юникод 30000 символов.
Программно создавать просто, имя должно быть в формате \\?\имя
...
Рейтинг: 0 / 0
01.04.2008, 13:11
    #35227067
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Привет, DmGr!
Ты пишешь:

DmGrD> Приведите пример названия книги,
D> длина которого более 255 символов,
D> очень хочется посмеяться http://www.google.ru/search?q=самое длинное название книги

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 13:19
    #35227101
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Anatoly Podgoretsky
AP> Статья хорошая, но с ошибками, я посмотрел только по
AP> части имен. Во первых длина для ANSI = 260 символов, а
AP> для Юникод 30000 символов. Программно создавать просто,
AP> имя должно быть в формате \\?\имяты говоришь про длину имени файла или полного пути ?

http://support.microsoft.com/kb/100108 Соглашения именования в NTFS
Имена файлов могут состоять не более чем из 255 символов, включая любое расширение. В именах сохраняется регистр введенных символов, но сами имена не зависят от регистра. NTFS не различает имена в зависимости от регистра. В именах могут быть использованы любые символы за исключением указанных ниже.
? " / \ < > * | :

В настоящее время из командной строки можно задать имя файла длиной не более 253 символов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 13:41
    #35227183
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Я говорю про MAX_PATH
поскольку понятие длины имени просто нет, есть понятие общая длина.
Касательно других средств, например проводник, командная строка и т.д. - каждое из них навешивает свои ограничения, но это их ограничение, а не системы.
...
Рейтинг: 0 / 0
01.04.2008, 13:53
    #35227225
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Вот что говорит MSDN
1In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\\?\" to the path.
2The shell and the file system have different requirements. It is possible to create a path with the API that the shell UI cannot handle.
И если смотреть разные места в MSDN - то не сложно найти противоречия, например в других местах говорят только о 32000 символов как максимум. Или можно найти упоминание и о 255 символов, но эти части как правило писали, те кто писал свои ограниченые функции. Реально в данный момент MAX_PATH = 260, ранее были и 144 и 83
...
Рейтинг: 0 / 0
01.04.2008, 14:07
    #35227273
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Привет, Anatoly!
Ты пишешь:

AnatolyРеально в данный момент MAX_PATH = 260, ранее были и 144 и 83
Если я правильно понял вопрошающего (а понять его мудрено), то речь не совсем об этом.
Да, для функции CreateFile(), длина строки передаваемой в lpFileName ограничена именно MAX_PATH.
Он же (вопрошающий), если я его понял, жаждет преодолеть ограничения файловой системы
на длину имени файла.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 14:12
    #35227287
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Ограничение на длину в файловой системе NTFS равно 32000 или 32767 символов. Информация в разных местах не совпадает.
...
Рейтинг: 0 / 0
01.04.2008, 14:14
    #35227297
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
KhodФайловая система NTFS.

Когдавыуженаучитесьпользоватсяпоиском?
Maximum Path Length

In the Windows API (with some exceptions discussed later), the maximum length for a path is MAX_PATH, which is defined as 260 characters. A local path is structured in the following order: drive letter, colon, backslash, components separated by backslashes, and a terminating null character. For example, the maximum path on drive D is "D:\<256 chars>NUL".

Note Functions in the Windows API convert "/" to "\" as part of converting the name to an NT-style name except when using the "\\?\" prefix as detailed in the following sections.

The Windows API has many functions that also have Unicode versions to permit a maximum path length of approximately 32,000 characters composed of components up to 255 characters each in length. To specify that kind of extended length path, use the "\\?\" prefix. For example, "\\?\D:\<path>".

Note The maximum path of 32,000 characters is approximate, because the "\\?\" prefix can be expanded to a longer string, and the expansion applies to the total length.

To specify such a path using UNC, use the "\\?\UNC\" prefix. For example, "\\?\UNC\<server>\<share>". These prefixes are not used as part of the path itself. They indicate that the path should be passed to the system with minimal modification, which means that you cannot use forward slashes to represent path separators, or a period to represent the current directory. Also, you cannot use the "\\?\" prefix with a relative path. Relative paths are limited to MAX_PATH characters.

When using the API to create a directory, the specified path cannot be so long that you cannot append an 8.3 file name (MAX_PATH – 12).

The shell and the file system have different requirements. It is possible to create a path with the API that the shell UI cannot handle.
...
Рейтинг: 0 / 0
01.04.2008, 14:17
    #35227317
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Anatoly Podgoretsky
AP> Ограничение на длину в файловой системе NTFS равно 32000 или 32767
AP> символов. Информация в разных местах не совпадаетВ справке по CreateFile написано:

Windows NT: You can use paths longer than MAX_PATH characters by calling the wide (W) version of CreateFile and prepending "\\?\" to the path. The "\\?\" tells the function to turn off path parsing. This lets you use paths that are nearly 32,000 Unicode characters long

Если я правильно понимаю, то это значит "около 32000", стало быть, можно сделать предположение, что число 32000 возникло как округление 32767
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 14:22
    #35227340
Anatoly Podgoretsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Наверно, а вот в другом месте я читаю, что 256 байт, отсюда 255 возникло потому, что это максимальное значение для байта.
...
Рейтинг: 0 / 0
01.04.2008, 16:06
    #35227711
Khod
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Кто реально смог на своей Винде задать имя файла состоящее хотя бы из 270 символов?
Есть ли какие-то определённые ключи реестра на включение этого режима?
...
Рейтинг: 0 / 0
01.04.2008, 16:35
    #35227827
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Привет, Anatoly!
Ты пишешь:

AnatolyAP> Наверно, а вот в другом месте я читаю, что 256 байт,
AP> отсюда 255 возникло потому, что это максимальное значение для байта.провел эксперимент.
результаты довольно интересны.
таки 255 символов максимум для NTFS.
убедитесь сами:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
 program  TextMaxPath;
 {$APPTYPE CONSOLE} 
 uses 
  SysUtils, Windows;

 function  StringToUnicode( const  s: AnsiString; codePage: Word): WideString;
 var 
  l: integer;
 begin 
   if  s = ''  then 
    Result := ''
   else 
     begin 
      l := MultiByteToWideChar(CodePage, MB_PRECOMPOSED + MB_USEGLYPHCHARS, @s[ 1 ], - 1 ,  nil ,  0 );
      SetLength(Result, l);
       if  l >  1   then 
        MultiByteToWideChar(CodePage, MB_PRECOMPOSED + MB_USEGLYPHCHARS, @s[ 1 ], - 1 , @Result[ 1 ], l);
     end ;
 end ;

 const 
  FileExt = '.txt';
  PromptIn: WideString = 'Задайте длину имени файла:';
  PromptEnter: WideString = 'Нажмите Enter';
  PromptSucess: WideString = 'Файл создан успешно';
 var 
  out_handle: Cardinal;
  dummy: Pointer;
  aFileName: AnsiString;
  wFileName: WideString;
  ErrMessage: PWideChar;
  i, N, FileHandle: Cardinal;
 begin 
  out_handle := GetStdHandle(STD_OUTPUT_HANDLE);
  WriteConsoleW(out_handle, PWideChar(PromptIn), length(PromptIn), N, dummy);
  readln(N);
   if  N >  0   then 
     begin 
      Randomize;
      aFileName := '\\?\' + GetCurrentDir + '\';
       for  i :=  1   to  N - Length(FileExt)  do 
        aFileName := aFileName + Chr(ORD('А') + Random(ORD('я') - ORD('А')));
      aFileName := aFileName + FileExt;

      wFileName := StringToUnicode(aFileName,  1251 );

      WriteConsoleW(out_handle, PWideChar(wFileName), Length(wFileName), N, dummy);
      Writeln;
      Writeln;

      FileHandle := CreateFileW(PWideChar(wFileName), GENERIC_WRITE,  0 ,  nil , CREATE_ALWAYS,  0 ,  0 );
       if  FileHandle = INVALID_HANDLE_VALUE  then 
         begin 
          FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER  or  FORMAT_MESSAGE_FROM_SYSTEM,  nil , GetLastError(), LANG_USER_DEFAULT, @ErrMessage,  0 ,  nil );
          WriteConsoleW(out_handle, ErrMessage, Length(WideString(ErrMessage)), N, dummy);
          WriteConsoleW(out_handle, PWideChar(PromptEnter), Length(PromptEnter), N, dummy);
          Readln;
         end 
       else 
         begin 
          CloseHandle(FileHandle);
          WriteConsoleW(out_handle, PWideChar(PromptSucess), Length(PromptSucess), N, dummy);
          WriteConsoleW(out_handle, PWideChar(PromptEnter), Length(PromptEnter), N, dummy);
          Readln;
         end ;
     end ;
 end .

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 16:47
    #35227870
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Нам таки пишут из Редмонта:
The Windows API has many functions that also have Unicode versions to permit
a maximum path length of approximately 32,000 characters
composed of components up to 255 characters each in length.

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.04.2008, 22:49
    #35228558
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Давайте разбиратся.

1) Я знаю как минимум 3 типа NTFS. Надо узнать с какой версией мы имеем дело.

2) Надо узнать какая ОС. И какие режимы компилляции были использованы, действительно-ли вызываются те ф-ции kernel о которых пишет MSDN.
...
Рейтинг: 0 / 0
02.04.2008, 09:32
    #35228886
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
на практите IE может создавать имена (без пути) охиренной длины и система кушает
но стоит только попытаться скопировать проводником - орёт большая длина имени, и отказывается копировать этот файл.
...
Рейтинг: 0 / 0
02.04.2008, 10:34
    #35229056
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Я-б попробовал сегодня повторить подвиг Мимопроходящего, но компиллятора под рукой щас нету. Возможно попробую завтра.
...
Рейтинг: 0 / 0
02.04.2008, 12:11
    #35229382
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как научить WinXP создавать файлы с длиной имени > 255 символов?
Привет, вадя!
Ты пишешь:

вадяв> на практите IE может создавать имена (без пути) охиренной длины и система кушаети где эта практика?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / Windows [игнор отключен] [закрыт для гостей] / Как научить WinXP создавать файлы с длиной имени > 255 символов? / 25 сообщений из 28, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]