Форум

Проблема с копированием файла - как сохранить дату?

SADSTAR2: Копирую функцией __CopyFile(src,trg) Вроде бы она же вызывается командой COPY FILE ... TO ... При этом не сохраняется дата+время файла-источника, а пишется системное на момент копирования. Как скопировать с сохранением оригинала?

Ответов - 4

Pasha: Сейчас - только самому установить дату создания результирующего файла см. FileDate(), FileTime(), SetFDaTi() Но можно было бы добавить эту функциональность в харбор, клиппер ведь сохраняет дату

Pasha: Сделал. Возьми на xHarbour CVS

SADSTAR2: Вчера уже сделал по вашему первому совету. Делал себе утилиту для автоматического обновления файлов на сетевых рабочих станциях с расшаренного ресурса. Настройка и описание - в Ini-фале. Может кому интересен такой вариант. Вроде работает. -------CheckNew.prg------------ #include <minigui.ch> #define CRLF HB_OsNewLine() function Main() local cIniFile:= GetStartupFolder()+'\CheckNew.ini' local cSection local nQTY:=0, lConfirmDialog:=.f., cCurrentFolder:='', cRun:='' local cSource:='', cTarget:='' local aD1, aD2, nTS1:=0, nTS2:=0 p:='' BEGIN INI FILE cIniFile cSection:='COMMON' GET p SECTION cSection ENTRY "nQTY" DEFAULT 0 nQTY:=val(p) GET p SECTION cSection ENTRY "lConfirmDialog" DEFAULT 'F' lConfirmDialog:=if(upper(left(p,1))='Y', .t., .f.) GET cCurrentFolder SECTION cSection ENTRY "CurrentFolder" DEFAULT '' GET cRun SECTION cSection ENTRY "Run" DEFAULT '' for i:=1 to nQTY cSection:='FILE'+alltrim(str(i)) GET cSource SECTION cSection ENTRY "SOURCE" DEFAULT '' GET cTarget SECTION cSection ENTRY "TARGET" DEFAULT '' if !empty(cSource) .and. HB_FILEEXISTS(cSource) //DIRECTORY(<cDirSpec>, [<cAttributes>]) --> aDirectory aD1:=DIRECTORY( cSource) if len(aD1)>0 nTS1:=val(DTOS(aD1[1,3]))*100000+TIMETOSEC(aD1[1,4]) endif else loop endif nTS2:=0 if !empty(cTarget) if HB_FILEEXISTS(cTarget) aD2:=DIRECTORY( cTarget) if len(aD2)>0 nTS2:=val(DTOS(aD2[1,3]))*100000+TIMETOSEC(aD2[1,4]) endif endif else loop endif //msgbox(str(nTS1)+'/'+str(nTS2)) if nTS1>nTS2 //есть обновление if lConfirmDialog if MsgYesNo('Найдено обновление для файла <'+cTarget+'>'+CRLF+; 'Установить это обновление?', 'CheckNew') __CopyFile( cSource, cTarget) //SETFDATI(<cFilename>, [<dDate>], [<cTime>]) --> lDone SETFDATI(cTarget, aD1[1,3], aD1[1,4]) endif else __CopyFile( cSource, cTarget) SETFDATI(cTarget, aD1[1,3], aD1[1,4]) endif endif next END INI if !empty(cCurrentFolder) DIRCHANGE(cCurrentFolder) endif if !empty(cRun) EXECUTE FILE cRun endif return Nil //------------------------------- -----CheckNew.ini--------------- [INFO] ;Не удаляйте эту секцию с описанием структуры файла. ;Иначе в дальнейшем вам будет трудно настраивать программу ;т.к. она не имеет диалогового интерфейса ; ;Обязательная секция COMMON ;Обязательный числовой параметр nQTY - количество проверяемых файлов ;Логический параметр lConfirmDialog - если Y[es] , то для обновления ; каждого файла задается вопрос ;при непустом CurrentFolder - по окончании обновления всех файлов ; описанная здесь папка становится папкой "по-умолчанию" ;при непустом Run - по окончании обновления всех файлов запускается ; описанная здесь программа ; ;Секции описания проверяемых файлов FILE1 ... FILEn, где n=nQTY ;в каждой секции ;SOURCE - файл-источник с полным путем к нему ;TARGET - файл-приемник с полным путем к нему ; сравниваются (дата+время) создания файлов ; файлы SOURCE и TARGET могут иметь разные имена [COMMON] nQTY=1 lConfirmDialog=Yes CurrentFolder=C:\MiniGUI_Projects\CheckNew\ Run=C:\MiniGUI_Projects\CheckNew\SkladMySQL.Exe [FILE1] SOURCE=\\Pdc\exchange.box\l'vov\SkladMySQL.Exe TARGET=C:\MiniGUI_Projects\CheckNew\SkladMySQL.Exe


Гость: А как определить текущую папку?



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