Wie bestimmt der TC das Datum einer Datei (unter Delphi)?

German support forum

Moderators: white, Hacker, Stefan2

Post Reply
Northman
Junior Member
Junior Member
Posts: 8
Joined: 2003-09-01, 17:30 UTC

Wie bestimmt der TC das Datum einer Datei (unter Delphi)?

Post by *Northman »

Hallo Herr Ghisler,

ich habe ein Problem bei einem meiner eigenen Delphi Projekte. Ich lese von bestimmten Dateien das Datum aus. Das Problem besteht darin, daß der gesamte Pfad+Dateiname mehr als 256 Zeichen hat. Der TotalCommander zeigt das korrekt an, aber ich kann das Datum nicht lesen:

1. FileAge() liefert -1 zurück
2. TSearchRec.Time und TSearchRec.FindData.ftLastWriteTime liefern
1.1.1600 zurück
3. Ein OpenFile() mit FileGetDate() liefert AFAIR 1.1.1899 zurück

Es wäre nett, wenn Sie mir vielleicht sagen könnten, wie sie das Datum einlesen.

Vielen Dank im voraus :-)
BTW: Ich weiß, daß der Pfad nicht länger als 256 Zeichen sein darf. Deswegen sucht mein Programm genau nach diesen.

Das obige ist ein bischen off-topic. Deswegen noch ein bischen on-topic mit einem kleinem Bugreport(?):
Beim Verzeichnisse synchronisieren werden zwar von den Dateien die Permissions kopiert, aber nicht von den Verzeichnissen.
Administratorrechte sind vorhanden.
Bye, Northman
User avatar
Lefteous
Power Member
Power Member
Posts: 9535
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

kleiner Einwurf zu dem Thema: Die Pfadlänge ist unter NTFS nicht auf 256 Zeichen beschränkt. Lediglich die Dateinamen sind auf diese Länge beschränkt. Unter älteren Dateisystemen gibt es stärkere Limitierungen.


Auch ich möchte an dieser Stelle einen kleinen Bugreport einbringen:
Beim Anlegen einer neuen Datei überprüft der Total Commander scheinbar nicht die Länge der Eingabe. Anschließend kann der entsprechende Editor eine solche Datei nicht anlegen. War das schon bekannt?
Northman
Junior Member
Junior Member
Posts: 8
Joined: 2003-09-01, 17:30 UTC

Post by *Northman »

Lefteous wrote:kleiner Einwurf zu dem Thema: Die Pfadlänge ist unter NTFS nicht auf 256 Zeichen beschränkt. Lediglich die Dateinamen sind auf diese Länge beschränkt. Unter älteren Dateisystemen gibt es stärkere Limitierungen.
Das ist so nicht korrekt: man lege unter c:\ ein DIR mit 100 Zeichen an (10mal 0123456789), darunter nochmal das gleiche und darunter nochmal 40 Zeichen. Damit hat der Pfad 245 Zeichen (240+"c:\ \ ") Wenn man per Explorer eine Datei mit langem Namen dorthin kopieren möchte kommt eine FM: {Dateiname} kann nicht kopiert werden. Der angegebene Dateiname ist zu lang oder ungültig.
Beim Kopieren per TC wird der Dateiname einfach abgeschnitten und auch die Extension entfällt.
Bye, Northman
User avatar
Lefteous
Power Member
Power Member
Posts: 9535
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Northman
Das ist so nicht korrekt: man lege unter c:\ ein DIR mit 100 Zeichen an (10mal 0123456789), darunter nochmal das gleiche und darunter nochmal 40 Zeichen. Damit hat der Pfad 245 Zeichen (240+"c:\ \ \") Wenn man per Explorer eine Datei mit langem Namen dorthin kopieren möchte kommt eine FM: {Dateiname} kann nicht kopiert werden. Der angegebene Dateiname ist zu lang oder ungültig.
Beim Kopieren per TC wird der Dateiname einfach abgeschnitten und auch die Extension entfällt.

Der Total Commander (und unglaublicherweise auch der Explorer) nutzen die Möglichkeiten des Dateisystems nicht aus. Es ist ohne weiteres möglich einen 10000 Zeichen langen Pfad zu erstellen und dort Dateien anzulegen. Das Betriebssystem bietet hierzu die nötigen Funktionen.

Auch um in Deinem Delphi Programm wirst Du wohl diese API-Funktionen nehmen müssen, sonst kommst Du womöglich noch in Teufelsküche.
Hilfreiche Funktionen in diesem Zusammenhang:

FindFirstFile
FindNextFile

In der MSDN-Library ist genau beschrieben wie man diese Funktionen einsetzt um nicht auf 256 Zeichen beschränkt zu sein. Das ganze muss Unicode sein, außerdem sollte man sich mit dem Prefix \\?\ vertraut machen.


Ich bin nicht sicher: Ist es ein Feature-Request oder ein Bugreport, aber wenn der Total Commander die Möglichkeiten von NTFS ausschöpfen würde, wäre das echt spitze.
User avatar
Hacker
Moderator
Moderator
Posts: 13081
Joined: 2003-02-06, 14:56 UTC
Location: Bratislava, Slovakia

Post by *Hacker »

Lefteous,
Beim Anlegen einer neuen Datei überprüft der Total Commander scheinbar nicht die Länge der Eingabe. Anschließend kann der entsprechende Editor eine solche Datei nicht anlegen.
Eigentlich legt der TC die Datei an und ruft den Editor mit dem Dateinamen als Parameter anschliessend auf.

HTH
Roman
Mal angenommen, du drückst Strg+F, wählst die FTP-Verbindung (mit gespeichertem Passwort), klickst aber nicht auf Verbinden, sondern fällst tot um.
Northman
Junior Member
Junior Member
Posts: 8
Joined: 2003-09-01, 17:30 UTC

Post by *Northman »

Hallo Leute,

da mein Thread ja doch den ein oder anderen View bekommen hat, hier noch die Auflösung:
über einen Tip aus de.comp.lang.delphi.misc habe ich die Lösung.
Man setzt vorher per chdir() das Directory und nimmt dann TsearchRec.Time nur noch auf den Dateinamen und nicht mehr mit Pfad.
Alle anderen Varianten aus meinem ersten Posting bringen trotzdem ein falsches Datum.


Wenn ich jetzt noch meine Textdatei finden würde, in der ich meine Verbesserungsvorschläge und Bugs des Total Commanders niedergeschrieben hatte, könnte ich auch noch was ontopic bringen. Aber leider scheint die Datei irgendwann mal verschütt gegangen zu sein :-(
Ich finde sie auch mit dem TC nicht wieder. Aber vll liegt das einfach an den falschen Suchkriterien ;-)
Bye, Northman
User avatar
Lefteous
Power Member
Power Member
Posts: 9535
Joined: 2003-02-09, 01:18 UTC
Location: Germany
Contact:

Post by *Lefteous »

2Northman

Aber leider scheint die Datei irgendwann mal verschütt gegangen zu sein :-(
Ich finde sie auch mit dem TC nicht wieder. Aber vll liegt das einfach an den falschen Suchkriterien ;-)
...oder der Pfad unter dem die Datei gespeichert ist, ist zu lang ;-)
Northman
Junior Member
Junior Member
Posts: 8
Joined: 2003-09-01, 17:30 UTC

Post by *Northman »

Lefteous wrote:2Northman
...oder der Pfad unter dem die Datei gespeichert ist, ist zu lang ;-)
LOL. Scherzkeks ;-))


Aber mal im Ernst: versuch mal einen sinnvollen Pfad (auch mit mehreren Ebenen) plus Dateinamen anzulegen, der über 255 Zeichen kommt. Das sind verdammt viele Zeichen. Unsere Anwender schaffen das trotzdem. Liegt aber zum Großteil an den beschreibenden Filenamen. Ich habe einem Kumpel gegenüber schon mal spaßeshalber folgenden Filenamen erfunden, welcher aber nicht wirklich weit von der Wirklichkeit entfernt ist (aus dem ICQ Log):
[23:28] Northman: Da haben einige Dateien alleine schon 100 Zeichen ala: "Sitzung vom 11.11.2000 mit dem Thema Auslandsgeschäft unter besonderer Berücksichtigung der weltweiten Angstzustände bei Dunkelheit durch Sonnenfinsternis.ppt" ;-))
Sowas paßt dann auch bei einer 1600er Auflösung nicht mehr in ein TC Fenster ;-)
Bye, Northman
Post Reply