Schauen ob Datei existiert, aber schnell!

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Schauen ob Datei existiert, aber schnell!

Beitrag von Lukaso »

Hallo,

ich bräuchte ne methode, die Checkt ob eine Datei existiert, ich benutze momentan "FileSize(file) > 0", nur ist mir das ein bißchen zu Langsam, ich möchte eigentlich NUR schauen ob die Datei existiert....
Villeicht kennt von euch jemand was besseres?

Danke :allright:

MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Benutzeravatar
helpy
Beiträge: 636
Registriert: 29.08.2004 13:29

Beitrag von helpy »

Hi,

Zuerst mal: "FileSize(file) > 0" stimmt nicht! Du musst "FileSize(file) >= 0" verwenden, denn es gibt ja auch Dateien mit einer Größe von 0 Byte.

Ansonsten sieh Dir die API-Funktionen durch ...

cu, helpy
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

geht readfile() nicht??

Code: Alles auswählen

If ReadFile(0,"C:\erwin.txt") =0
  MessageRequester("","die Datei c:\erwin.txt! ist nicht vorhanden",0)
Else
  CloseFile(0)
  MessageRequester("","C:\erwin.txt ist sehr wohl vorhanden",0)
EndIf
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Um eine Dateilänge zu finden, muß du das Inhaltsverzeichnis durchforsten. Wenn du rausfinden willst, ob eine Datei exestiert, mußt du das Inhaltsverzeichnis durchforsten....

Ansonsten: Wie die Dateien nur aus bestimmte Ordner kommen können: VOrher komplett einlesen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

@helpy
Ja, du hast recht, aber ich denke kaum, dass ich 0Byte Mp3-Dateien abspielen kann ;)

@bobobo
Danke für deinen Vorschlag, nur dauert das noch um einiges länger, alls FileSize :|

@GPI
Du sprichst in rätseln :? :roll:


MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Beitrag von GPI »

Lukaso hat geschrieben:@GPI
Du sprichst in rätseln :? :roll:
Einfach: in Inhaltsverzeichnis der Festplatte sind alle Dateinamen größe, länge, start-in-datenbereich-der-hdd, Attribute etc. eingetragen.

Du überprüft momentan die Dateilänge. Für die Dateilänge muß man halt dieses Inhaltsverzeichnis überprüfen. Jenachdem könntest du auch die directory-Commandos benutzen, die könnten ein tick schneller sein. Ansonsten mußt du immer in inhaltsverzeichnis reinschauen und das liegt nun mal auf der Festplatte...

Wenn du jetzt aber viele dateien in einen bestimmen Ordner überprüfen willst, dann empfielt es sich, dieses Verzeichnis komplett in eine Array/LinkedList zu laden, weil nun mal ein Speicherzugriff ein tick schneller ist als ein HDD-Zugriff.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
Benutzeravatar
MLK
Beiträge: 267
Registriert: 01.11.2004 13:17
Wohnort: Hamburg

Beitrag von MLK »

MD5 ist mehr als doppelt so schnell!

Code: Alles auswählen

start=ElapsedMilliseconds()
For i=1 To 100000
    MD5FileFingerprint("c:\michgibtsnicht.abc")
Next
MD5=ElapsedMilliseconds()-start

start=ElapsedMilliseconds()
For i=1 To 100000
    FileSize("c:\michgibtsnicht.abc")
Next
FS=ElapsedMilliseconds()-start

MessageRequester("","MD5: "+Str(MD5)+#CRLF$+"FileSize: "+Str(FS))
Benutzeravatar
wichtel
Beiträge: 150
Registriert: 09.09.2004 08:35
Wohnort: Hattersheim

Beitrag von wichtel »

Bei mir ist Filesize am schnellsten:
???
Wenn die Datei nicht existiert...

Wenn die Datei existiert dann braucht MD5 recht lange /:->

Code: Alles auswählen

start=ElapsedMilliseconds() 
For i=1 To 100000 
  MD5FileFingerprint("c:\michgibtsnicht.abc") 
Next 
MD5=ElapsedMilliseconds()-start 

start=ElapsedMilliseconds() 
For i=1 To 100000 
  FileSize("c:\michgibtsnicht.abc") 
Next 
FS=ElapsedMilliseconds()-start 


start=ElapsedMilliseconds() 
For i=1 To 100000 
  ReadFile(0,"c:\michgibtsnicht.abc") 
Next 
OF=ElapsedMilliseconds()-start 




MessageRequester("","MD5: "+Str(MD5)+#CRLF$+"FileSize: "+Str(FS)+#crlf$+"Readfile: "+Str(OF)) 
 
PB / jaPBe jeweils aktuellste Version, seit 3.62 dabei, XP sp3 de/en & W7 en
Benutzeravatar
dige
Beiträge: 1246
Registriert: 08.09.2004 08:53

Beitrag von dige »

Schon mal mit

Code: Alles auswählen

Result.w = FileExists(String)
versucht? Das ist glaub ich in der Helpfuncs Lib von Andreas Miethe dabei...

cya dige
Antworten