Форум » [x]Harbour » путь+имя файла больше 259 » Ответить

путь+имя файла больше 259

fil: Длина путь+имя файла больше 259. Каким образом можно переименовать такой файл ?

Ответов - 11

SergKis: fil пишет Каким образом можно переименовать такой файл ? через dbf (заменяем RecNo), массив (номер элемента), hash (позиция) и т.д. cKey := hb_Crc32(...) // использовал когда то на ключи вместо наименования в небольшой базе

fil: Не понял. Нельзя ли поподробнее ?

fil: Так.. есть файл на диске. Мне его надо переименовать (название сократить). Причем здесь dbf и ключи ?


SergKis: 1. use FileList dbAppend() REPL FileNM with cFileName1 dbAppend() REPL FileNM with cFileName2 ... INDEX ON FileNM TAG NAM use n := 0 use FileList IF dbSeek(cFileLong) ; n := RecNo() ENDIF use cFile := strzero(n, 7) 2. а := {} AAdd(a, cFileName1) AAdd(a, cFileName2) ... n := ascan(a, cFileLong) cFile := strzero(n, 7) 3. a := hb_hash() hb_HSet(a, cFileName1, cFileName1) hb_HSet(a, cFileName2, cFileName2) ... n := hb_HPos(a, cFileLong) cFile := strzero(h, 7) Используем таблицу перекодировки, потом ее можете давать в просмотр и выбор файла для работы

fil: само изменение размера файла это hb_HPos(a, cFileLong) ?

SergKis: fil пишет само изменение размера файла это hb_HPos(a, cFileLong) ? a - это hash cFileLong - имя файла с путем длинное т.е. ищем в hash, если нашли, то n - позиция ключа в hash если не нашли, добавляем файл в hash и снова делаем n := hb_HPos(...). тут вопросик, возможна ли смена позиции ? надо проверить и если да, то делать к ключу (длинное имя) значение STATC s_nHCount счетчика для hash s_nHCount ++ hb_HSet(a, cFileName1, s_nHCount) тогда берем значение на найденный ключ, а не позицию, т.е. n := hb_HGetDef(a, cFileLong, 0) cFile := strzero(n, 7) PS вместо STATIC счетчика новое имя можно делать hb_HSet( a, cFileName1, Dtos(Date())+"_"+StrTran(hb_ntos(Seconds()), ".", "")+cExt )

fil: Т.е. мы сам файл в массив побитно кладем ?

SergKis: fil пишет Мне его надо переименовать (название сократить). Причем здесь dbf и ключи ? Если это разовая операция, то достаточно новое имя сделать cFile := Dtos(Date())+"_"+StrTran(hb_ntos(Seconds()), ".", "")+cExt Если потом надо работать с этими файлами, то делаем таблицы перекодировок для файлов, как выше показано <старое название> -> <новое название> Т.е. мы сам файл в массив побитно кладем ? оперируем именами файлов

fil: Это все прекрасно, только файлы "путь+имя файла больше 259" так не переименовать. Это админы задание выдали ибо при резервном копировании такие файлы прпопускаюися

SergKis: т.е. hb_vfRename( <cFileSrc>, <cFileDst> ) даст .F. и hb не видит их. тогда что работает, как файлы появились, чем читаются, обрабатываются ? PS тогда админы должны дать системную утилиту для переименования и исп. ее и таблицы перекодировки, все утилитой переименовать для архива и восстанавливать после из архива

fil: Победил. Банально REN через CMD (тока чтоб он не мелькал надо в WScript обернуть)



полная версия страницы