Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 | 3 |

 

  Вопрос: Как создать путь, длинее 220 символов? Добавлено: 26.05.07 13:36  

Автор вопроса:  Леша | ICQ: 362231326 

Ответить

  Ответы Всего ответов: 31  

Номер ответа: 16
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #16 Добавлено: 28.05.07 10:38
* не используется в именах символ точки, так как она является разделителем между именем файла и расширением, определяющим тип файла. Вместо точки удобно использовать знак подчеркивания;
Система не против этого, так что чтобы геморроиться на подчеркиваниях смело ставьте точку.
* максимально допустимая длина имени файла составляет 255 символов, включая пробелы. Однако очень длинные имена использовать неудобно, так как в проводнике их все равно читать будет трудно;
не 255, а 260, и не длина имени файла, а его полный путь.
* имена не должны содержать следующих символов: \ / : * ? " < > |.
Ну, кроме точки соответственно.

Ответить

Номер ответа: 17
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #17 Добавлено: 28.05.07 11:45
ну так а как создать путь вида \\CompName\D:\? хотя б короче 260 символов?

Ответить

Номер ответа: 18
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #18 Добавлено: 28.05.07 12:24
Народ, что-то вы гоните...
Бывают ли такие пути: \\CompName\D:\?
Наверное, \\CompName\D$\?

Ответить

Номер ответа: 19
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #19 Добавлено: 28.05.07 12:25
copy C:\afasd.txt \\?\C:\1.t?xt..
результат = \\?\C:\1.txxt..

copy C:\afasd.txt \\?\C:\1.t*xt..
результат = предлагает заменить \\?\C:\1.txt..

copy C:\afasd.txt \\?\C:\1.t/xt..
ошибка в синтаксисе команды

copy C:\afasd.txt \\?\C:\1.t\xt..
Системе не удается найти указанный путь.

copy C:\afasd.txt \\?\C:\1.t:xt..
Синтаксическая ошибка в имени файла, имени папки или метке тома.

< и > - перенаправление ввода/вывода, еще раз в этом убедился когда в папке Documents And Settings появился файл xt =)

| разделитель команд в ДОСе, т.ч. ругалась что нет команды xt..

Ответить

Номер ответа: 20
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #20 Добавлено: 28.05.07 12:26
Причем здесь CompName?
Надо писать именно так: \\?\C:\имя_файла

Ответить

Номер ответа: 21
Автор ответа:
 Страшный Сон



Вопросов: 46
Ответов: 848
 Профиль | | #21 Добавлено: 28.05.07 13:01
Ограничена не длина имени файла, а длина самого пути. Вообще следует избегать имён файлов и папок длиной более 12 символов (8 на имя, 3 на расширение плюс разделитель), несмотря на поддержку таковых современными ОС.

Ответить

Номер ответа: 22
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #22 Добавлено: 28.05.07 13:55
Причем здесь CompName?
Надо писать именно так: \\?\C:\имя_файла

чесно скказать я думал что это наподобе сетевого пути. &;)
Ограничена не длина имени файла, а длина самого пути.

ИМЕННО! создать путь длиннее 260 символов нельзя!

Ответить

Номер ответа: 23
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #23 Добавлено: 28.05.07 14:23
Блин. Не получается у меня больше ~260 символов создать имя файла.
Кто говорил что имя может до 65к быть? Пример в студию =)

Ответить

Номер ответа: 24
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #24 Добавлено: 28.05.07 14:55
Кто говорил что имя может до 65к быть?
сравни
не 255, а 260, и не длина имени файла, а его полный путь.

Ответить

Номер ответа: 25
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #25 Добавлено: 28.05.07 15:22
я имел в виду утверждение Sharp
Используй путь вида \\?\C:\ вместо C:\, тогда максимальная длина пути может быть до ~65к символов

Sharp, либо ты ошибаешься, либо... как создать имя файла больше 260 символов?

Может быть это возможно на NTFS, но на FAT32 всеми известными мне способами у меня не получилось это сделать.

А по теме вопроса, так лучше сделать БД (базу, инюшник, текстовик и т.п.), которая содержит соответствия имя_файла (реального файла, который на диске)=описание (в виде полных имен файлов неограниченной длинны, если угодно)
Как предлагал это сделать Arseny (а если и не так, то он меня на мысль навел)

Ответить

Номер ответа: 26
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #26 Добавлено: 28.05.07 15:54
Может быть это возможно на NTFS, но на FAT32 всеми известными мне способами у меня не получилось это сделать.

у меня NTFS - без разницы. нельзя!
А по теме вопроса, так лучше сделать БД (базу, инюшник, текстовик и т.п.), которая содержит соответствия имя_файла (реального файла, который на диске)=описание (в виде полных имен файлов неограниченной длинны, если угодно)
Как предлагал это сделать Arseny (а если и не так, то он меня на мысль навел)

можно и так, а можно по алгоритму какому то вычислять имя нужной папки или файла в процессе работы программы.Я наверное так и сделаю

Ответить

Номер ответа: 27
Автор ответа:
 Arseny



ICQ: 298826769 

Вопросов: 53
Ответов: 1732
 Профиль | | #27 Добавлено: 28.05.07 15:58
Sharp, либо ты ошибаешься, либо... как создать имя файла больше 260 символов?

2ZagZag: Ты совсем запарился: ведь ясно же сказано длина ПУТИ, а не имени файла. Степень вложенности каталогов-то разной быть может.

Ответить

Номер ответа: 28
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #28
Добавлено: 28.05.07 17:09
#define UNICODE
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <stdio.h>
#include <string.h>

int wmain() {

    wchar_t *longpath = (wchar_t *) GlobalAlloc(GPTR, 1000000);

    wcscpy(longpath,L"\\\\?\\C:\\";);

    const wchar_t next[] = L"LONGLONGLONG\\";

    int pathsize = wcslen(longpath);
    int nextsize = wcslen(next);
    const int maxpath = 1000000;

    wcscat(longpath, next);

    while (pathsize < maxpath && CreateDirectory(longpath, NULL)) {
        pathsize += nextsize;
        wprintf(L"Path size: %u\n", pathsize);        
        wcscat(longpath, next);        
    }

    wprintf(L"\nDone.";);    

    GlobalFree(longpath);

    return 0;
}

Ответить

Номер ответа: 29
Автор ответа:
 Леша



ICQ: 362231326 

Вопросов: 9
Ответов: 76
 Профиль | | #29 Добавлено: 28.05.07 19:16
круто! Нам до такого еще расти и расти

Ответить

Номер ответа: 30
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #30 Добавлено: 29.05.07 13:19
да ладно, все понятно
только это совершенно не нужно, поскольку не может быть нормально использовано. и не экономично, и не оптимизированно, извращение короче.
настолько же глупо вбить в любой exe-шник пару миллионов знаков. ну ничего не измениццо.

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам