Autor |
Beitrag |
D. Annies
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Do 11.04.13 17:01
Moin, Delpher,
jedesmal nach der Zeitumstellung habe ich wegen der 1h-Verschiebung ca. 400 Dateien (mit Bestätigung) zu
sichern.
Geht es auch, dass, wenn der Zeitstempel genau diese eine Stunde ausmacht (plus/minus), dass man dann
prg-gesteuert darauf verzichtet?
Code:
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: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115:
| Procedure TBuchMain.FindFiles(aPath, aFindMask: String; aWithSub: Boolean); Var FindRec : tSearchRec; uvname, start, ziel : string; n, erg : integer; gefunden, raus : boolean; Begin raus := false; Dateiliste := TStringList.Create; If (aPath = '') or (aFindMask = '') then Exit; If aPath[Length(aPath)] <> '\' Then aPath := aPath + '\'; If FindFirst (aPath + aFindMask, faAnyFile - faDirectory, FindRec) = 0 Then Begin Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then begin if aktuser <> 'an s' then begin if (pos('home.', FindRec.Name) > 0) or (pos('.pas', FindRec.Name) > 0) or (pos('.dfm', FindRec.Name) > 0) or (pos('.res', FindRec.Name) > 0) or (pos('.exe', FindRec.Name) > 0) or (pos('.dpr', FindRec.Name) > 0) OR (pos('.ddp', FindRec.Name) > 0) or (pos('.dof', FindRec.Name) > 0) or (pos('.dsk', FindRec.Name) > 0) or (pos('.dcu', FindRec.Name) > 0) or (pos('.cfg', FindRec.Name) > 0) then begin end end else begin if (pos('.ddp', FindRec.Name) > 0) or (pos('.dof', FindRec.Name) > 0) or (pos('.dsk', FindRec.Name) > 0) or (pos('.dcu', FindRec.Name) > 0) or (pos('.cfg', FindRec.Name) > 0) then begin end;
if (FindRec.Name[1] = '_') or (pos('.~', FindRec.Name) > 0) or (pos('bestand_', FindRec.Name) > 0) or (pos('temp_', FindRec.Name) > 0) or (pos('Geburtstag_', FindRec.Name) > 0) then begin showmessage(apath + findrec.name + ' wird gelöscht'); DeleteFile(apath + FindRec.name) end;
uvname := ''; for n := pos('Buecherei\', aPath)+10 to length(aPath) do uvname := uvname + apath[n]; if aPath[1] = label38.Caption[1] then begin start := label38.Caption; ziel := label30.Caption; home_filename := label38.Caption + uvname + FindRec.Name; work_filename := label30.caption + uvname + FindRec.name; end else begin start := label30.Caption; ziel := label38.caption; home_filename := label30.caption + uvname + FindRec.name; work_filename := label38.Caption + uvname + FindRec.name; end; if (fileexists(home_filename)) and (fileexists(work_filename)) then begin
if (FileDateToDateTime(FileAge(work_filename)) <> FileDateToDateTime(FileAge(home_filename))) and (fileage(work_filename) + 3600 <> FileAge(home_filename)) and (fileage(work_filename) <> FileAge(home_filename) + 3600) then begin erg := xmessagedlg('ArchivBit wurde gesetzt' +#13 + 'Soll ' + work_filename + ' '+#13+ datetimetostr(filedatetodatetime(FileAge(work_filename))) +#13+ 'durch ' + home_filename + ' '+#13+ datetimetostr(filedatetodatetime(FileAge(home_filename))) +#13+ ' ersetzt werden?', mtConfirmation, [mbYes, mbno, mbcancel], ['ja', 'nein', 'Abbrechen'], self.font); case erg of mryes : CopyFile(PChar(home_filename), PChar(work_filename), FALSE); mrcancel : raus := true; end; end end else if (fileexists(home_filename)) and (not fileexists(work_filename)) then begin if not directoryexists(ziel+uvname) then CreateDir(ziel+uvname); CopyFile(PChar(home_filename), PChar(work_filename), TRUE); end; end end; if raus = true then BREAK; Until FindNext(FindRec) <> 0; FindClose(FindRec); end;
If (Not aWithSub) or raus Then Exit; gefunden := FindFirst(aPath + '*.*', faAnyFile, FindRec) = 0; while gefunden do begin if ((FindRec.Attr and faDirectory) <> 0) and (FindRec.Name[1] <> '.') then FindFiles(aPath + FindRec.Name, aFindMask, aWithSub); gefunden := FindNext(FindRec) = 0; end; FindClose(FindRec);
End; |
Vielen Dank für eure Ideen!
LG, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 11.04.13 17:32
Du könntest statt der lokalen Zeit die Systemzeit ermitteln (UTC) und mit der vergleichen. Siehe z.B. hier.
Für diesen Beitrag haben gedankt: D. Annies
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Do 11.04.13 18:04
oder man ersetze dieses and durch ein or!
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: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115:
| Procedure TBuchMain.FindFiles(aPath, aFindMask: String; aWithSub: Boolean); Var FindRec : tSearchRec; uvname, start, ziel : string; n, erg : integer; gefunden, raus : boolean; Begin raus := false; Dateiliste := TStringList.Create; If (aPath = '') or (aFindMask = '') then Exit; If aPath[Length(aPath)] <> '\' Then aPath := aPath + '\'; If FindFirst (aPath + aFindMask, faAnyFile - faDirectory, FindRec) = 0 Then Begin Repeat If (FindRec.Name <> '.') and (FindRec.Name <> '..') Then begin if aktuser <> 'an s' then begin if (pos('home.', FindRec.Name) > 0) or (pos('.pas', FindRec.Name) > 0) or (pos('.dfm', FindRec.Name) > 0) or (pos('.res', FindRec.Name) > 0) or (pos('.exe', FindRec.Name) > 0) or (pos('.dpr', FindRec.Name) > 0) OR (pos('.ddp', FindRec.Name) > 0) or (pos('.dof', FindRec.Name) > 0) or (pos('.dsk', FindRec.Name) > 0) or (pos('.dcu', FindRec.Name) > 0) or (pos('.cfg', FindRec.Name) > 0) then begin end end else begin if (pos('.ddp', FindRec.Name) > 0) or (pos('.dof', FindRec.Name) > 0) or (pos('.dsk', FindRec.Name) > 0) or (pos('.dcu', FindRec.Name) > 0) or (pos('.cfg', FindRec.Name) > 0) then begin end;
if (FindRec.Name[1] = '_') or (pos('.~', FindRec.Name) > 0) or (pos('bestand_', FindRec.Name) > 0) or (pos('temp_', FindRec.Name) > 0) or (pos('Geburtstag_', FindRec.Name) > 0) then begin showmessage(apath + findrec.name + ' wird gelöscht'); DeleteFile(apath + FindRec.name) end;
uvname := ''; for n := pos('Buecherei\', aPath)+10 to length(aPath) do uvname := uvname + apath[n]; if aPath[1] = label38.Caption[1] then begin start := label38.Caption; ziel := label30.Caption; home_filename := label38.Caption + uvname + FindRec.Name; work_filename := label30.caption + uvname + FindRec.name; end else begin start := label30.Caption; ziel := label38.caption; home_filename := label30.caption + uvname + FindRec.name; work_filename := label38.Caption + uvname + FindRec.name; end; if (fileexists(home_filename)) and (fileexists(work_filename)) then begin
if (FileDateToDateTime(FileAge(work_filename)) <> FileDateToDateTime(FileAge(home_filename))) and (fileage(work_filename) + 3600 <> FileAge(home_filename)) and (fileage(work_filename) <> FileAge(home_filename) + 3600) then begin erg := xmessagedlg('ArchivBit wurde gesetzt' +#13 + 'Soll ' + work_filename + ' '+#13+ datetimetostr(filedatetodatetime(FileAge(work_filename))) +#13+ 'durch ' + home_filename + ' '+#13+ datetimetostr(filedatetodatetime(FileAge(home_filename))) +#13+ ' ersetzt werden?', mtConfirmation, [mbYes, mbno, mbcancel], ['ja', 'nein', 'Abbrechen'], self.font); case erg of mryes : CopyFile(PChar(home_filename), PChar(work_filename), FALSE); mrcancel : raus := true; end; end end else if (fileexists(home_filename)) and (not fileexists(work_filename)) then begin if not directoryexists(ziel+uvname) then CreateDir(ziel+uvname); CopyFile(PChar(home_filename), PChar(work_filename), TRUE); end; end end; if raus = true then BREAK; Until FindNext(FindRec) <> 0; FindClose(FindRec); end;
If (Not aWithSub) or raus Then Exit; gefunden := FindFirst(aPath + '*.*', faAnyFile, FindRec) = 0; while gefunden do begin if ((FindRec.Attr and faDirectory) <> 0) and (FindRec.Name[1] <> '.') then FindFiles(aPath + FindRec.Name, aFindMask, aWithSub); gefunden := FindNext(FindRec) = 0; end; FindClose(FindRec);
End; |
_________________ ut vires desint, tamen est laudanda voluntas
|
|
WasWeißDennIch
      
Beiträge: 653
Erhaltene Danke: 160
|
Verfasst: Do 11.04.13 18:11
Sei mir nicht böse, aber ich fände es immer noch um Längen eleganter, beiden Zeiten in ein Sommer-/Winterzeit unabhängiges Format zu bringen und dann erst zu vergleichen, als mit zeitlichen Offsets zu hantieren. Aber wie ich schon in meiner PN schrieb: es gibt auch an anderen Code-Stellen noch Potential 
Für diesen Beitrag haben gedankt: D. Annies
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Do 11.04.13 21:03
Danke für deinen Hinweis/Erinnererung.
Ich gucke mir deinen Code am WE an, bin zurzeit ziemlich in Pression.
LG, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Fr 12.04.13 07:51
1. Eine Zeitumstellung findet im Jahr an genau zwei Sonntagen statt: letzter Sonntagmorgen im März ---> eine Stunde wird übersprungen, letzter Sonntagmorgen im Oktober --> eine Stunde wird eingefügt. Man braucht also nicht bei jedem Programmlauf bei den einzelnen Dateien auf Zeitsprünge zu prüfen. Genau genommen reicht da der Zeitpunkt im Oktober, weil nur dann eine Uhrzeit zweimal auftauchen könnte (z. B. 2:30 A-Stunde und 2:30 B-Stunde). Zum Optimieren würde ich also hier ansetzen.
2. Pos arbeitet case-sensitiv.
Delphi-Quelltext 1:
| (pos('.pas', FindRec.Name) > 0) or (pos('.dfm', FindRec.Name) > 0) or |
Was passiert wohl, wenn die Endung zum Beispiel ".PAS" lautet?
Für diesen Beitrag haben gedankt: D. Annies
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Sa 13.04.13 08:20
Danke für die Hinweise, Gerd
Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
|