neuste Datei in einem Verzeichnis feststellen

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benz
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 440
Registriert: Mo, 30. Mai 2011 15:06
Danksagung erhalten: 1 Mal

neuste Datei in einem Verzeichnis feststellen

Beitrag von Benz »

Hi,
Ich habe ein Skript von VBS, das die neuste Datei in einem Verzeichnis ermittelt.
Sowas geht doch bestimmt auch in Xbase oder?

Das VBS Skript:

Code: Alles auswählen

		
Set IO = CreateObject("Scripting.FileSystemObject")
		set oFolder = IO.GetFolder("C:\")
        Set oFiles = oFolder.Files
		sNewestFile = Null

        For Each oFile In oFiles
			If IsNull(sNewestFile) Then
				sNewestFile = oFile.Path
				dPrevDate = oFile.DateLastModified
			Elseif dPrevDate < oFile.DateLastModified Then
				sNewestFile = oFile.Path
				oNewestFile = oFile.DateLastModified
			End If
        Next
		wscript.echo "Zuletzt geänderte (neuste) Datei:  "  & sNewestFile & " geändert am " & oNewestFile
Der Sinn davon ist folgender:
Bisher verwende ich Xcopy, wenn ich von einem Verzeichnis in ein anderes kopieren will.
Ob das immer erfolgreich ist kann ich leider nicht einsehen.
(Das ganze ist eine Datensicherung)
Deshalb würde ich gerne einen Dialog machen, in den man beide Verzeichnspfade einträgt, auf Start klickt und
am Ende wird dann per MsgBox aus beiden Pfaden der Name der neusten Datei mit Änderungsdatum angezeigt.
Wenn diese übereinstimmen, dann war das kopieren erfolgreich. Das reicht für mich als Erfolgsbedingung, da das Programm, das die
neuste Datei erzeugt erst kurz vorher beendet wurde und dadurch die neuste Datei sehr zeitnah sein muss.

Die Sicherung erfolgt meist auf eine externe Festplatte. Diese hat allerdings nicht immer den gleichen Laufwerksbuchstaben.
Gibt es eine Möglichkeit neu hinzukommende Laufwerksbuchstaben (also wenn jemand eine ext. Festplatte einsteckt) während der Programmlaufzeit zu registrieren?

Sind viele Fragen auf einmal, ich weiß.
Danke schonmal!
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: neuste Datei in einem Verzeichnis feststellen

Beitrag von Tom »

Directory(cPath) gibt Dir den Inhalt eines Verzeichnisses als zweidimensionales Array zurück. Die Spalte F_WRITE_DATE (Nr. 3, definiert in directry.ch) gibt Dir das letzte Schreibdatum zurück. Du musst das Array dann nur entsprechend sortieren:

Code: Alles auswählen

a := Directory(cPath)
aSort(a,,,{|a1,a2|a1[F_WRITE_DATE] > a2[F_WRITE_DATE}})
Falls auch noch die Zeit eine Rolle spielt, musst Du DtoS(a1[F_WRITE_DATE])+a1[F_WRITE_TIME] beim Sortieren verwenden.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: neuste Datei in einem Verzeichnis feststellen

Beitrag von AUGE_OHR »

Benz hat geschrieben:Bisher verwende ich Xcopy, wenn ich von einem Verzeichnis in ein anderes kopieren will.
Ob das immer erfolgreich ist kann ich leider nicht einsehen.
(Das ganze ist eine Datensicherung)
wenn du mit XCOPY arbeitest kannst du doch
/V Überprüft jede neue Datei auf Korrektheit.
verwenden. mit ">> LOGFILE.TXT" kann man alles in eine Datei umleiten.
Benz hat geschrieben:Deshalb würde ich gerne einen Dialog machen, in den man beide Verzeichnspfade einträgt, auf Start klickt ...
wie wäre das ganze mittels SHFILE wie es der Explorer verwendet. (siehe Attachment )
Nebeneffekt : man hat auch einen Progressbar ( unter Win8 sogar den "neuen" )
Benz hat geschrieben:Die Sicherung erfolgt meist auf eine externe Festplatte. Diese hat allerdings nicht immer den gleichen Laufwerksbuchstaben.
Gibt es eine Möglichkeit neu hinzukommende Laufwerksbuchstaben (also wenn jemand eine ext. Festplatte einsteckt) während der Programmlaufzeit zu registrieren?
da sind wir jetzt bei USB...

es gibt da die Windows Message WM_DEVICECHANGE und den Notify Event DBT_DEVICEARRIVAL wenn ein USB Gerät "an-gestöpselt" wurde.
dito. wird ein Event ausgelöst wenn ein USB Gerät "entfernt" (DBT_DEVICEQUERYREMOVE) wurde bzw. wenn der Vorgang abgeschlossen wurde (DBT_DEVICEREMOVECOMPLETE).
mehr dazu unter http://msdn.microsoft.com/en-us/library ... 85%29.aspx oder bei Pablo im Forum
Dateianhänge
SHFILEOPERATION.zip
SHFILE : Copy, Move, Del ala Explorer
(2.33 KiB) 212-mal heruntergeladen
gruss by OHR
Jimmy
Antworten