Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Dateidatum auslesen und schreiben

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.10.2004, 17:15    Titel: Dateidatum auslesen und schreiben Antworten mit Zitat

Hallo.

Hier ein Ausschnitt aus der MonsterFAQ:

Andreas Meile hat Folgendes geschrieben:
Das einzige, was natürlich fehlt: Das Erstellungsdatum wird nicht mit übernommen, aber dies kann man ja mit CALL INTERRUPT auf INT 21h, AH=57h (Datum lesen (AL=0h) bzw. setzen (AL=1h)) noch jederzeit nachholen... lächeln


Wie muss ich das genau umsetzen?

Eine nicht funktionierende Idee von mir:

Code:
'$INCLUDE: 'QBX.BI'
Dim Regs AS RegType
'lesen
Regs.ax=&H5700
'schreiben
Regs.ax=&H5701
CALL INTERRUPT(&H21, Regs, Regs)


Wo müsste ich den Dateinamen angeben? Wie muss das richtig heißen?

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ChemicalWarfare



Anmeldungsdatum: 15.09.2004
Beiträge: 152

BeitragVerfasst am: 09.10.2004, 18:10    Titel: Antworten mit Zitat

In BX muß das Handle der Datei stehen. In CX steht die Uhrzeit, in DX das Datum. Bei gestztem CF und AX == 6 ist das Handle ungültig.
Format:
CX:
Bit 0-4: Sekunden (Achtung: * 2 nehmen)
Bit 5-10: Minuten
Bit 11-15: Stunden

DX:
Bit 0-4: Tag
Bit 5-8: Monat
Bit 9-15: Jahr (Achtung: + 1980 nehmen)

P.S.:
Zitat:
'lesen
Regs.ax=&H5700
'schreiben
Regs.ax=&H5701

Ich würde dazwischen noch ein call interrupt setzen, sonst bringt das erste nicht so viel...
_________________
Er ist ein Wunder!
Nein, er ist eine Missgeburt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 09.10.2004, 20:51    Titel: Ah, danke! Antworten mit Zitat

Hallo.

CW hat Folgendes geschrieben:
Ich würde dazwischen noch ein call interrupt setzen, sonst bringt das erste nicht so viel...


Ja, schon klar. Ich hatte das so als Entweder-Oder geschrieben.

CW hat Folgendes geschrieben:
Bit 0-4: Sekunden (Achtung: * 2 nehmen)
Bit 5-10: Minuten
Bit 11-15: Stunden


Also so würde ich das Datum setzen?
Code:
'$INCLUDE: 'QBX.BI'
Dim Regs AS RegType
OPEN "TEST.TXT" FOR RANDOM AS #1
Regs.ax = &H5701
Regs.bx = 1
Regs.cx = 563412 '-> Gäbe 12:34:56
Regs.dx = 010203 '-> Gäbe 01.02.1983
CALL INTERRUPT(&H21, Regs, Regs)
CLOSE #1


Oder wie?

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.10.2004, 11:53    Titel: Antworten mit Zitat

So, jetzt muss ich direkt auch einmal wieder meine dicke Bibel ("PC Intern" von Michael Tischer) hervorkramen... ;-) Hab Dir rasch ein Beispiel geschrieben (ist auch getestet):

http://beilagen.dreael.ch/QB/DATDEMO.BAS

Studiere es mit Vorteil von A bis Z und probiere es mit einem File im %TEMP%-Ordner einmal aus. Ansonsten eine kurze Beschreibung dazu: Zuerst müssen wir einmal die Datei öffnen (INT 21h, AH=3Dh), um ein Handle zu erhalten. Sobald wir dieses Handle haben, können wir die Zeit sowohl lesen (INT 21h, AX=5700h) als auch setzen (INT 21h, AX=5701h; beides wird demonstriert, wenn Du mein Beispiel laufen lässt). Am Schluss schliessen wir wieder die Datei (INT 21h, AH=3Eh) ordnungsgemäss und geben das Handle wieder frei.

Die Interpretation der Zeitwerte im 16-Bit-Format ist dagegen etwas anspruchsvoller, da es binär und nicht dezimal aufgebaut ist. Besondere Vorkehrungen musste ich noch bezüglich Jahr und Stunden treffen, da QB kein "unsigned integer" kennt, denn unser Programm soll ja schliesslich bis ins Jahr 2107 noch korrekt arbeiten. :-)

Profi-Quizfrage: In den Artikeln zur Jahr-2000-Problematik konnte man früher auf www.microsoft.com hochoffiziell nachlesen, dass das FAT-Dateisystem bis ins Jahr 2107 verwendet werden kann. Wer findet heraus, warum? Wer mein Beispiel verstanden hat, sollte dies sofort herausfinden können!
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 10.10.2004, 12:12    Titel: Cool! Antworten mit Zitat

Hallo.

Danke dreael! Echt cool! lächeln

BTW: Gibt es auch eine Möglichkeit, das Datum zu lesen und zu setzen, an dem die Datei erstellt worden ist?

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.10.2004, 12:36    Titel: Re: Cool! Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
BTW: Gibt es auch eine Möglichkeit, das Datum zu lesen und zu setzen, an dem die Datei erstellt worden ist?

Ja, das gibt es, und zwar sind dies Funktionen, die Microsoft mit Windows 95 eingeführt hat, so dass dort das Dateisystem auch der UNIX/Linux-Philosophie entspricht, wo man "last access", "last modified" und "created" unterscheidet. "last modified" gab es schon immer seit DOS 2.0, aber "last access" und "created" wurden mit Windows 95 eingeführt.

Siehe dazu

http://www.ctyme.com/intr/rb-3001.htm
http://www.ctyme.com/intr/rb-3002.htm
http://www.ctyme.com/intr/rb-3003.htm
http://www.ctyme.com/intr/rb-3004.htm

Microsoft hat dazu neue Unterfunktionen zu INT 21h, AH=57h spendiert. Übrigens hat dies Microsoft sogar hochoffiziell auf ihrer Homepage dokumentiert:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win9x/lfn_0het.asp
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 10.10.2004, 14:02    Titel: Danke! Antworten mit Zitat

Hallo.

Danke! lächeln Das klappt prima! lächeln Einfach andere Werte für al in deinen Code einsetzen und schon klappts auch für die anderen Angaben! lächeln
Echt super!

Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2507
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 10.10.2004, 14:33    Titel: Re: Danke! Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Einfach andere Werte für al in deinen Code einsetzen und schon klappts auch für die anderen Angaben! :)

Dies kommt daher, das Microsoft diese DOS-Funktion weitgehend kompatibel gestaltet hat, was das Parameterprofil betrifft. Einziger Unterschied (daher Vorsicht und aufpassen!): Die Zeit ist dort noch feiner aufgelöst (bisher betrug die Auflösung 2 Sekunden, wie aus meinem Code ersichtlich), wofür man das SI-Register noch setzen muss, also beispielsweise mein Programm mit
Code:
s% = (dosIntAus.cx AND 31) * 2 + dosIntAus.si \ 100
hundertstelSekunden% = dosIntAus.si MOD 100

beim Erstellungszeit auslesen und
Code:
dosIntEin.si = 100 * (s% AND 1) + hundertstelSekunden%

beim Setzen ergänzen. Siehe dazu
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win9x/95func_6fs8.asp
und
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win9x/95func_6fu0.asp

Umgekehrt die Operationen für den Zeitpunkt des letzten (auch Lese!)-Zugriffs arbeiten nur mit ganzen Tagen, wobei Microsoft ausdrücklich verlangt, cx, welches die Zeit beinhaltet, auf 0 zu setzen, um zukunftskompatibel zu bleiben. Siehe dazu
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win9x/95func_6foo.asp
und
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win9x/95func_6fqg.asp
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz