ReadAvail bei Datei

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

judos

Betreff: ReadAvail bei Datei

BeitragMi, Sep 29, 2010 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

Das Problem: Ich will eine Datei mit ReadBytes in eine Bank lesen. Dabei verwendet ich ReadAvail welches mir allerdings nur 0 zurückgibt.
Die Datei existiert. Das Handle der Datei ist nicht 0. Ich habe versucht einfach ein Byte zu lesen um festzustellen ob die Datei danach im Speicher verfügbar ist, das hat aber auch nichts gebracht.
Ich es zudem mit Blitz3d und BlitzPlus getestet. Funktioniert bei beiden nicht, also sollte es wohl nicht von der Version abhängen.
Die Partition ist mit NFTS formatiert.

Hier noch das Zitat aus der Blitzhilfe:
Zitat:
Wurde eine Datei geöffnet, so liefert diese Funktion die Anzahl der Bytes, die in den Speicher abgelegt wurden.


Das ganze mal auf ein kleineres Beispiel zugeschnitten wo der Fehler bei mir auftritt.
BlitzBasic: [AUSKLAPPEN]
file=WriteFile("1.dat")
WriteLine file,"1.jpg"
file2=ReadFile("1.jpg")
size=1024
bank=CreateBank(size)
DebugLog "file2 = "+file2
While Not Eof(file2)
anz=ReadAvail(file2)
DebugLog "verfügbar: "+anz
Delay 100
If anz>size Then ResizeBank bank,anz:size=anz
ReadBytes bank,file2,0,anz
WriteBytes bank,file,0,anz
Wend
CloseFile file2
CloseFile file


Also hier sollten einfach die Daten eines Bildes in eine andere Datei kopiert werden. Dabei geht das natürlich auch mit ReadByte,WriteByte prinzipiell sollte es ja mit ReadBytes und WriteBytes schneller gehen wenn ich mich nicht irre...
Weiss vielleicht jemand ob ich hier ein Fehler gemacht habe oder woran das Problem denn liegen könnte?

mfg judos

Eingeproggt

BeitragMi, Sep 29, 2010 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat mich grad interessiert und da hab ich die Sache mal so versucht, mit FileSize statt ReadAvail:

BlitzBasic: [AUSKLAPPEN]
file=WriteFile("1.dat")
WriteLine file,"1.jpg"
file2=ReadFile("1.jpg")
size=FileSize("1.jpg")
bank=CreateBank(size)
DebugLog "Größe: "+size
DebugLog "Read: "+ReadBytes(bank,file2,0,size)
DebugLog "Write: "+WriteBytes(bank,file,0,size)
CloseFile file2
CloseFile file
WaitKey()
End


Hat bei einer Testdatei (war ne Textdatei in meinem Fall, kein Bild) funktioniert.
mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9
 

judos

BeitragMi, Sep 29, 2010 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Gute Idee.
Wäre eine Alternative um das Problem zu umgehen.
Hat es bei dir aber mit ReadAvail auch nicht funktioniert? (Nur damit ich weiss, dass ich nicht verrückt bin Wink )

Ich versuche immer der Sache auf den Grund zu gehen obwohl es eigentlich schneller ginge eine Alternative zu suchen... Also ich versuchs jetzt mal mit FileSize. Falls noch wer eine Ahnung hat was mit ReadAvail los war, kann er sich ja noch melden.

Vielen Dank

mfg judos

hazumu-kun

BeitragMi, Sep 29, 2010 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Normal ist Readavail ja für Netzwerkstreams ausgelegt, falls du dann einen Dateistream übergibst, weiß es nichts damit anzufangen und gibt ohne weitere Fehler 0 zurück.
Das erscheint mir am logischsten.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

BtbN

BeitragDo, Sep 30, 2010 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
War nicht Eof das mittel der Wahl für Dateien?

Eingeproggt

BeitragDo, Sep 30, 2010 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
@judos:
Wenn es dich beruhigt: Dein Code geht bei mir auch nicht.

@hazumu:
So denk ichs mir auch, aber in der BB-Hilfe steht, dass ReadAvail auch bei Dateien anwendbar ist.

@btbN:
Ja klar Smile aber es ging judos ja darum, eine Datei mit den ReadBytes-Befehl auszulesen.
In der Hoffnung das wäre schneller als eine Schleife mit Eof und ReadByte. Ob das nun schneller is hab ich noch gar ned ausprobiert, kA.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group