Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateiformat und Dateigröße auslesen.. (https://www.delphipraxis.net/4336-dateiformat-und-dateigroesse-auslesen.html)

NeoDeluxe 25. Apr 2003 07:49


Dateiformat und Dateigröße auslesen..
 
Servus.
ich möchte den Dateiformat und Dateigröße einer Datei auslesen. Wie kann ich das machen, mit den OpenDialog, oda wie??? :wiejetzt:

Grüße, NeoDeluxe 8)

Daniel 25. Apr 2003 08:00

Hallo neoDeluxe,

wenn man mal davon ausgeht, dass Du über den OpenDialog schon mal den vollständigen Pfad und Namen der Datei hast, könntest Du beispielsweise die folgende Funktion nutzen, um die Dateigröße zu ermitteln:

Delphi-Quellcode:
Function DPGetFileSize( aFilename : String ) : Cardinal;
var aFile : File;
 oldFMode : Integer;
Begin
  If FileExists( aFilename ) Then
  Begin
    oldFMode:= FileMode;
    FileMode:= fmOpenRead;

    AssignFile( aFile, 1 );
    Result:= FileSize( aFile );
    CloseFile( aFile );

    FileMode:= oldFMode;
  End
  Else
    Result:= -1;
End;
Ungetestet, sollte aber gehen. Ich bin jedoch der Meinung, irgendwo in meiner Delphi6-Hilfe schon eine von Borland vorgefertigte Funktion gesehen zu haben, die die einem gegebenen Dateinamen die Größe liefert.

Was Du allerdings genau mit Dateiformat meinst, weiss ich nicht so recht. Wenn es Dir nur um das Suffix geht (".PAS" / ".BMP" etc.), dann kannst Du hierzu die Funktion "ExtractFileExt" nutzen.

NeoDeluxe 25. Apr 2003 08:06

Zitat:

Zitat von Daniel
wenn man mal davon ausgeht, dass Du über den OpenDialog schon mal den vollständigen Pfad und Namen der Datei hast...

Ne leider nicht, ich weis net wie ich die Informationen mit einem OpenDialog bekomme :oops:
Delphi-Quellcode:
  if OpenDialog.Execute then
    label1.Caption."hier muss was sein womit ich die Infos auslese oder?";
Zitat:

Zitat von Daniel
Was Du allerdings genau mit Dateiformat meinst, weiss ich nicht so recht. Wenn es Dir nur um das Suffix geht (".PAS" / ".BMP" etc.), dann kannst Du hierzu die Funktion "ExtractFileExt" nutzen.

Also ich möchte ferne schon den Kompletten Namen der Datei haben.

Grüße, NeoDeluxe 8)

Daniel 25. Apr 2003 08:15

Hallo NeoDeluxe,

also mit dem Open-Dialog geht das wie folgt:

Code:
[b]If [color=#ff0055]OpenDialog1.Execute[/color] Then[/b]
[b]Begin[/b]
  myFileSize:= DPGetFileSize( [color=#ff0055][b]OpenDialog1.FileName[/b][/color] );
[b]End;[/b]
Das funktioniert zumindest so lange, wie Du in Deinem Dialog nur eine Datei zur Auswahl zulässt.

Der Name einer Datei steht nicht zwingend in einer festen Verbindung zum Format dieser Datei. Hieraus Rückschlüsse ziehen zu wollen kann in einigen Situationen gefährlich in die Hose gehen. Vielleicht magst Du uns zu Deiner Frage nach dem Dateiformat nähere Infos gehen...?

NeoDeluxe 25. Apr 2003 08:20

Zitat:

Zitat von Daniel
Vielleicht magst Du uns zu Deiner Frage nach dem Dateiformat nähere Infos gehen...?

Also es soll eine Datei gelesen werde, die dann später ausgeführt wird...die Datei kann jeder Art sein, darum Brauche ich die Dateiformat infos, aber wenn du sagts das es net so gut sei, dann mach ich nur die Endung davon...

Grüße, NeoDeluxe 8)

oki 25. Apr 2003 08:23

Hi NeoDeluxe,

versuch es mal mit der:
Delphi-Quellcode:
Function FileGetAttr(const FileName: string): Integer;
Gruß oki

Edit: Ups, hab zwischendurch was anderes gemacht und alle vorherigen Beiträge nicht mitbekommen.

Meine Variante gibt dir alle nötigen Dateiinfos (Größe, Atribute etc.). Für das Dateiformat sehe ich nur die Lösung über die File-Extention. Was besseres fällt mir jetzt auch nicht ein.

sharkx 25. Apr 2003 08:49

Ich persöhnlich bevorzuge folgenden source für die dateigrösse zu ermitteln:

Code:
function GetFileSize(Filename: string): integer;
var
  SR: TSearchRec;
begin
  if FindFirst(Filename, faAnyFile, SR) = 0 then
  begin
    Result := SR.Size;
  end
  else
  begin
    Result := -1;
  end;
  FindClose(SR);
end;
Warum ich den nehm? kA .. :>

Das ganze noch in einem Label anzeigen lassen:

Code:
Label1.Caption := 'Die Datei' + Dateiname + 'hat ' + (GetFileSize(dateiname) / 1024) + 'kb';
Der letzte Source habsch nu einfach ausm Kopf geschrieben, ohne zu testen, sollte aber kein fehler drinnen sein.

NeoDeluxe 25. Apr 2003 09:12

Zitat:

Zitat von sharkx

Das ganze noch in einem Label anzeigen lassen:

Code:
Label1.Caption := 'Die Datei' + Dateiname + 'hat ' + (GetFileSize(dateiname) / 1024) + 'kb';
Der letzte Source habsch nu einfach ausm Kopf geschrieben, ohne zu testen, sollte aber kein fehler drinnen sein.

Was soll ich statt Dateiname schreiben??? :wiejetzt:
Bekomme fehler, dass es unbekannt ist...

Grüße, NeoDeluxe 8)

sharkx 25. Apr 2003 09:25

hrhr Dateiname ist die Variable :>

Wenn du es mit einem Opendialog machst musst du anstelle von dateiname folgendes verwenden:

Code:
OpenDialog1.FileName

NeoDeluxe 25. Apr 2003 09:28

Zitat:

Zitat von sharkx
hrhr Dateiname ist die Variable :>

Wenn du es mit einem Opendialog machst musst du anstelle von dateiname folgendes verwenden:

Code:
OpenDialog1.FileName

Hab ich versucht: "Inkopatibele Typen "String und Integer". das wurde aber schon geklärt. ich habe erst eine Vaiable(Integer) dazwischen gemacht... aber jetzt bekomme ich ganz andere werte als es so ist, z.B. eine textdatei, 4KB und der zweigt 874 warum???

Grüße, NeoDeluxe 8)

NeoDeluxe 25. Apr 2003 10:25

Gut eine sache wurde geklärt, Dateigröße, was ist mit dem Dateiformat :?: :?: :?:

Grüße, NeoDeluxe 8)

flow 25. Apr 2003 10:38

Mit ExtractFileExt('Dateiname'); kannst du dir das Fileformat ermitteln.

Delphi-Quellcode:
sFileName := OpenDialog1.FileName;

If UpperCase(ExtractFileDir(sFileName)) = '.DOC' Then Begin
  ...
  // Fileformat is a Word Document
  ...
end
else If UpperCase(ExtractFileDir(sFileName)) = '.TXT' Then Begin
  ...
  // Fileformat is a Text File
  ...
end;
FLOW

NeoDeluxe 25. Apr 2003 10:51

Negativ :!:
passiert nix... :roll:

Grüße, NeoDeluxe 8)

flow 25. Apr 2003 10:53

definier mal was du mit File Format meinst!

FLOW

NeoDeluxe 25. Apr 2003 10:53

sFileName := OpenDialog1.FileName;

If UpperCase(ExtractFileExt(sFileName)) = '.DOC' Then Begin
...
// Fileformat is a Word Document
...
end
else If UpperCase(ExtractFileExt(sFileName)) = '.TXT' Then Begin
...
// Fileformat is a Text File
...
end;

NeoDeluxe 25. Apr 2003 10:57

Zitat:

Zitat von flow
definier mal was du mit File Format meinst!

FLOW

Code:
sFileName: String;
meinste das???

Grüße, NeoDeluxe 8)

Sharky 25. Apr 2003 11:28

Zitat:

Zitat von NeoDeluxe
...Also es soll eine Datei gelesen werde, die dann später ausgeführt wird...die Datei kann jeder Art sein, darum Brauche ich die Dateiformat infos, aber wenn du sagts das es net so gut sei, dann mach ich nur die Endung davon...


Informationen über ein Dateiformat kannst Du nicht "auslesen".
Weil: Sie ja nirgends stehen.

Was genau möchtest Du denn machen? Mit dem Datei-Opendialog eine Datei öffenen und dann mit dem, für diese Dateiendung, im Windows registrieren Programm starten?

NeoDeluxe 25. Apr 2003 11:33

Zitat:

Zitat von Sharky
Mit dem Datei-Opendialog eine Datei öffenen und dann mit dem, für diese Dateiendung, im Windows registrieren Programm starten?

Bingo Kollege...genau in die Mitte getroffen, volle 100 Punkte bekommen...
Ja, zum Beispiel, der Benutzer wählt, eine PDF datei, hat aber keine acrobat reader...das soll er eine Meldung bekommen, dass sowas auf seinem Rechner nicht existiert. Aber ansonsten, genau das was du gefragt hast...

Grüße, NeoDeluxe 8)

Sharky 25. Apr 2003 12:13

Zitat:

Zitat von NeoDeluxe
...Ja, zum Beispiel, der Benutzer wählt, eine PDF datei, hat aber keine acrobat reader...das soll er eine Meldung bekommen, dass sowas auf seinem Rechner nicht existiert....

Hmmm.... in diesem Fall müsstest Du also zuerst in der Regitry schauen ob für die Endung der Datei ein Programm zum öffnen eingetragen ist.

Schaue dir doch mal in der Registry HKEY_CLASSES_ROOT an.

Dort wird ,zumindest bei den Windows-Versionen die ich hier habe (NT/2000/XP), angegeben wolches Programm zum öffnen einer Datei verwendet werden soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz