Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Работа с файлами


Автор: ProgrammistDelphi 19.1.2005, 11:39
Работа с длинными именами файлов и каталогов. Как это обойти?
Допустим хочу создать файл *.bat, т.к. в нем нельзя использовать пути более 8 символов, как запоковать кучу файлов в один архив програмным способом. При том, что путь к базе данных указывается пользователем. программа должны быть абсолютно независима? smile.
Есть идея нужно ее развить.

создаю програмным способом bat файл
и вписываю туда такие строки:

cd\
cd //путь к файлам которые нужно упаковать {если имена длинные, то не срабатывает, функция преобразования в короткие имена не работает}

с:\WinRar\WinRar.exe a d:\Arhiv\MyBaza.rar

и запуск этой программы програмным способом. Но работает через раз. Все дело в длинных именах файлов. Какой есть стандартный способ решения этой проблемы? smile smile




Автор: Satana 19.1.2005, 11:46
не понял с какого это перепугу внутри батинка ограничение в 8!!!! символов на путь??? smile и что конкретно нада сделать? написать батник чтобы он автоматом архивировал какую либо папку чтоли?

Автор: Snowy 19.1.2005, 11:52
Батники спокойно работают с длинными именами.
Проблема может возникнуть только, если в имени есть пробелы.
В этом случае просто его нужно взять в кавычки.
Но если так хочется получить имя в стандарте 8.3, то юзай ExtractShortPathName.

И некрасиво исправлять вопрос после того, как на него ответили.
Если даешь пояснения, давай их ниже, иначе логика теряется.

Автор: ProgrammistDelphi 19.1.2005, 11:52
Satana
Да ты привильно понял smile , bat файл исполняет команды дос, попробуй сам убедись

Автор: Satana 19.1.2005, 12:04
ProgrammistDelphi
а ты под ним запускаешь? или всетки под виндой? если под ней то под какой?

Автор: Alex 19.1.2005, 12:43
Код

function sfn(const LongName: String): String;
// Возвращает LongFileName преобразованное в соответствующее короткое имя
var i :Integer;
begin
 SetLength(Result,Length(LongName));
 i := GetShortPathName(pChar(LongName),pChar(Result),Length(Result));
 if  i > Length(Result)  then begin
   SetLength(Result,i);
   i := GetShortPathName(pChar(LongName),pChar(Result),Length(Result));
 end;
 SetLength(Result,i);
end;

Автор: Akella 19.1.2005, 17:14
Цитата

создаю програмным способом bat файл
и вписываю туда такие строки:

cd\
cd //путь к файлам которые нужно упаковать {если имена длинные, то не срабатывает, функция преобразования в короткие имена не работает}

с:\WinRar\WinRar.exe a d:\Arhiv\MyBaza.rar

пропробуй добавлять так

"с:\Progam files\WinRar\WinRar.exe" a d:\Arhiv\MyBaza.rar
а именно путь вместе с *.exe-файлом пиши в двойные кавычки

Автор: Guest 19.1.2005, 20:14
Всем спасибо за подсказки!! Пока дождался вечера, чтобы попасть в инет, сам усе решил, но про кавычки не знал спасибо!!! smile

Автор: ProgrammistDelphi 19.1.2005, 20:17
Всем спасибо за подсказки!! Пока дождался вечера, чтобы попасть в инет, сам усе решил, но про кавычки не знал спасибо!!!
Извиняюсь забыл представиться. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)