Kleine Frage zu "FileSize" und "CreateFile"

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
FISCHAUGE
Beiträge: 108
Registriert: 25.03.2005 21:07
Wohnort: Karlsruhe
Kontaktdaten:

Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von FISCHAUGE »

Hi,
ich habe eine kleines Problem.
Ich möchte gerne eine Datei erstellen der Datei Name ist bsp: "14082013.tbd"
Nun würde ich gerne wenn dieser Name schon Vorhanden ist einfach eine nummer hinter denn Datei namen bsp: "14082013_1.tdb" schreiben falls dieser schon vorhanden ist "14082013_2.tbd" usw....

Wie lässt sich das am besten umsetzen?

Code: Alles auswählen

dateisuche = FileSize("tbd\"14082013".tbd")
  If dateisuche = -1
CreateFile(0,"tbd\"14082013.tbd")
closefile(0)
else
???
endif
grüße
Na alles Senkrecht?
Benutzeravatar
man-in-black
Beiträge: 362
Registriert: 21.08.2006 17:39

Re: Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von man-in-black »

moin moin,

würde ich eigentlich genauso machen, wie du im Beispielcode schon angedeutet hast.
Einfach um eine Schleife erweitern, die nach dem noch nicht vergebenen Index sucht. ;)
(Gleiche Vorgehensweise wie bei der ersten Überprüfung)
Gibt aber sicher noch schönere Lösungen.

Code: Alles auswählen

if Not Filesize("xyz.wv")
    createFile(0, "xyz.wv")
Else
    i=1
    While Filesize("xyz_"+str(i)+".wv")
      i+1
    wend
    CreateFile(0, "xyz_"+str(i)+".wv")
endif
CloseFile(0)
(hab aber gerade nicht im Kopf, was FileSize bei Nichtexistenz ausspuckt. Evt anpassen...)

Ist der Pfad schon vorgegeben, musst du in vorher aufsplitten, bevor der Index dran kommt.
(hab alles, kann alles, weiß alles!!^^)

Bild
Benutzeravatar
CSHW89
Beiträge: 489
Registriert: 14.12.2008 12:22

Re: Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von CSHW89 »

man-in-black hat geschrieben:hab aber gerade nicht im Kopf, was FileSize bei Nichtexistenz ausspuckt. Evt anpassen...
-1. Deshalb angepasst:

Code: Alles auswählen

if (Filesize("xyz.wv") = -1)
    createFile(0, "xyz.wv")
Else
    i=1
    While (Filesize("xyz_"+str(i)+".wv") <> -1)
      i+1
    wend
    CreateFile(0, "xyz_"+str(i)+".wv")
endif
CloseFile(0)
Allerdings würde ich es wahrscheinlich so machen. Zwar brauch ich eine Variable mehr, dafür ist es kompakter, Geschmacksache halt:

Code: Alles auswählen

name.s = "xyz.wv"
i=0
While (Filesize(name) <> -1)
  i+1
  name = "xyz_"+Str(i)+".wv"
wend
CreateFile(0, name)
CloseFile(0)
lg Kevin
Bild Bild Bild
http://www.jasik.de - Windows Hilfe Seite
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von NicTheQuick »

Das hier ist korrekt:

Code: Alles auswählen

If (Filesize("xyz.wv") < 0)
Es könnte nämlich auch sein, dass "xyz.wv" ein Verzeichnis ist. Und dann würde er versuchen mit 'CreateFile()' eine gleichnamige Datei zu erstellen, was natürlich nicht geht.
Benutzeravatar
FISCHAUGE
Beiträge: 108
Registriert: 25.03.2005 21:07
Wohnort: Karlsruhe
Kontaktdaten:

Re: Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von FISCHAUGE »

:allright: vielen dank an euch auf die Schleife bin ich nicht gekommen.
Na alles Senkrecht?
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von Makke »

Hi,

seit dem es den Parameter: #PB_File_SharedRead gibt, benutze ich folgende Funktion:

Code: Alles auswählen

Procedure.b FileExist(FullPathAndFilename$)
  Protected.i hFile = ReadFile(#PB_Any, FullPathAndFilename$, #PB_File_SharedRead)
  If isFile(hFile)
    CloseFile(hFile)
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
Spricht da etwas gegen (ausser das es nur für Windows funktioniert) ? Also kann es da zu falschen Ergebnissen kommen (Datei existiert, aber kann trotzdem nicht gelesen werden ?) ?
---
Windows 11 (64 bit)
Benutzeravatar
_JON_
Beiträge: 389
Registriert: 30.03.2010 15:24

Re: Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von _JON_ »

@Makke
könnte sein das du bei fehlenden Rechte ein falsches Ergebnis bekommst.

Probier mal das hier:

Code: Alles auswählen

Procedure FileExists(file.s)
  If GetFileAttributes_(file) <> $FFFFFFFF
    ProcedureReturn 1
  EndIf
EndProcedure
Aber warum benutzt du eigentlich nicht PB's FileSize() ?
PureBasic 5.46 LTS (Windows x86/x64) | windows 10 x64 Oktober failure
Benutzeravatar
Makke
Beiträge: 156
Registriert: 24.08.2011 18:00
Computerausstattung: AMD Ryzen 7 5700X - AMD Radeon RX 6800 XT - 32 GB DDR4 SDRAM
Wohnort: Ruhrpott
Kontaktdaten:

Re: Kleine Frage zu "FileSize" und "CreateFile"

Beitrag von Makke »

_JON_ hat geschrieben:@Makke
könnte sein das du bei fehlenden Rechte ein falsches Ergebnis bekommst.

...

Aber warum benutzt du eigentlich nicht PB's FileSize() ?
Naja, bei fehlenden Rechten werde ich wohl auch nicht schreiben können (in der Rechtevergabe theoretisch möglich aber unüblich), von daher hatte ich das bisher noch nie in Betracht gezogen ... und Deine andere Frage, warum nicht Filesize, ist mir bisher nicht in den Sinn gekommen, weil das andere halt auch funktioniert.
---
Windows 11 (64 bit)
Antworten