Problem mit OpenFile - SeekFile - WriteLine
Übersicht

RoLoBetreff: Problem mit OpenFile - SeekFile - WriteLine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Hab schon im Forum gesucht und gesehen das andere ähnliche Probleme haben, aber weil meine Frage nirgens konkret beantwortet wird eröffne ich hier ein neues Thema(ich hoffe es ist ok...). Ich habe eine Datei und möchte ganz hinten an die Datei einen Text hängen. Was muss ich machen? Und was mach ich falsch? Code: [AUSKLAPPEN] sp_zu = OpenFile("recent.dat")
SeekFile (sp_zu, FileSize("recent.dat")+Chr(10)) WriteLine sp_zu, "blabla" CloseFile sp_zu Danke für alle Antworten... RoLo |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, nach ungefähr 10 Sekunden Forumssuche habe ich folgendes gefunden: https://www.blitzforum.de/foru...ende+datei
Aber okay. Versuch mal die Größe der Datei in einer Variable zu speichern BEVOR du die Datei öffnest und dann einfach später die Variable benutzen. Könnte sein, dass es das schon war. Lg, M0rgenstern |
||
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erstmal danke für die schnelle Antwort.(Habe den Link gelesen...)
Ich habe es nun mit einem Variable probiert aber es funktioniert leider immer nochnicht... Hier nochmal der Code(Vielleicht liegt es daran, dass ich zweimal etwas schreiben will...): Code: [AUSKLAPPEN] aktuelle_filesize = FileSize("recent.dat")
sp_zu = OpenFile("recent.dat") SeekFile (sp_zu, aktuelle_filesize+Chr(10)) WriteLine sp_zu, "bla1 CloseFile sp_zu aktuelle_filesize = FileSize("recent.dat") sp_zu = OpenFile("recent.dat") SeekFile (sp_zu, aktuelle_filesize+Chr(10)) WriteLine sp_zu, "bla2" CloseFile sp_zu oder soll ich es so machen? Code: [AUSKLAPPEN] aktuelle_filesize = FileSize("recent.dat")
sp_zu = OpenFile("recent.dat") SeekFile (sp_zu, aktuelle_filesize+Chr(10)) WriteLine sp_zu, "bla1" WriteLine sp_zu, "bla2" CloseFile sp_zu beides funktioniert leider nicht Gruss RoLo |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Eine Frage: Was willst du mit dem +Chr(10) nach der Filesize noch bewirken? Vor allem: Du addierst da einen string zu einem Integer, da weißt du nicht unbedingt was bei rauskommt.
Lg, M0rgenstern |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die zweite Möglichkeit ist ganz klar zu bevorzugen!
Und zur Lösung des Problems: Ein "Chr(10)" beim SeekFile-Parameter anzugeben hat leider überhaupt keinen Sinn. Wenn du also am Ende der Datei einen Zeilenumbruch brauchst, so musst du diesen mit WriteByte(file,10) oder WriteLine(file,"") selbst dazu schreiben. Sollte es dir nicht um den Zeilenumbruch gehen, beschreibe "funktioniert leider nicht" bitte genauer. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich will mit Chr(10) auf einen neue Zeile springen.
In der Datei steht vor dem Ausführen: Code: [AUSKLAPPEN] Zeile1
Zeile2 Zeile3 Zeile 4 nach dem Ausführen steht Code: [AUSKLAPPEN] Zeile1
Zeile2 Zeile3 Zeile 4bla1 bla2 Aber es kommt auf das gleiche mit oder ohne Chr(10) |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso machst du bei SeekFile hinter "aktuelle_filesize" noch ein + CHR(10)? Welches Zeichen hat den den ASCII Code "10"?
Probiers mal so (So funktionierts bei mir): Code: [AUSKLAPPEN] sp_zu = OpenFile("recent.dat")
aktuelle_filesize = FileSize(sp_zu) SeekFile(sp_zu, aktuelle_filesize) Writeline sp_zu, "" Writeline sp_zu, "bla1" Writeline sp_zu, "bla2" mfG, CO2 |
||
mfG, CO²
Sprachen: BlitzMax, C, C++, C#, Java Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti |
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also bei mir funktioniert es auch - manchmal.
Ich weiss wo das Problem liegt. Wenn ich die Datei im Editor bearbeitet habe und die Mausposition auf einer neuen Zeile habe dann geht es. Sonst nicht. Bei Zitat: Zeile1
Zeile2 | geht es und bei Zitat: Zeile1
Zeile2| geht es nicht was kann ich dagegen machen? | -> soll die Position sein.... |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du kannst an die Position FileSize(...)-1 springen und dort mit ReadByte(...) das Zeichen lesen. Ist es =10 dann ist dort ein Zeilenumbruch und du kannst einfach so weiter schreiben.
Ist es <>10 dann ist dort kein Zeilenumbruch und du kannst mit WriteLine(...,"") einen hinmachen und wie gewohnt weiter schreiben. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok und nochmal für einen der schwer von Begriff ist ![]() |
||
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist ja kein Problem, wenns mal länger dauert zum Begreifen, ich glaube das kennt jeder der programmiert. Manchmal hockt man vor nem Problem und hat soch so sehr darin verannt, dass man den Code vor Problemen nicht mehr sieht.
@Mods: Kann es sein, dass der Thread vom Theme her eher in Beginners Corner gehört? Lg, M0rgenstern |
||
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also ich mach es jetzt so und es passiert garnichts mehr - also die datei wird überhaupt nicht verändert
Code: [AUSKLAPPEN] aktuelle_filesize = FileSize("recent.dat")
sp_zu = OpenFile("recent.dat") SeekFile (sp_zu, aktuelle_filesize-1) If ReadByte (sp_zu)<>10 Then WriteLine sp_zu, "" WriteLine sp_zu, "asdf" WriteLine sp_zu, "asdf2" CloseFile sp_zu |
||
![]() |
Eingeproggt |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau so hätte ich es gemeint.
Doch genau so schreibt er nichts... Ich habs debugged, von der Logik her stimmts. Frage meinerseits an alle: Kann es sein dass man mit "OpenFile" nur ENTWEDER lesen ODER schreiben kann? Für mich deutet alles darauf hin, dass der Read-Befehl am Anfang den Write-Zugriff danach irgendwie zum Scheitern verurteilt? mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zu Openfile (aus der Hilfe):
Zitat: Dieser Befehl öffnet eine Datei für einen Lese- und Schreibzugriff gleichzeitig. Somit kann man eine Datei sehr bequem aktualisieren (z.B. Score-Liste oder Datenbank), ohne, dass eine Kopie davon erstellt werden muss.
Diese Funktion liefert einen Wert, der für weitere Read- und Write-Befehle unbedingt notwendig ist. Wird Null zurückgeliefert, dann wurde die Datei nicht gefunden Jedoch ist in der Hilfe nirgendwo Code zu finden bei dem vor einem Schreibzugriff ein Lesezugriff erfolgt. Sieht also scheinbar nach deiner Vermutung aus, auch wenns die Hilfe nicht hergibt. Möglichkeit die mir momentan einfällt: Komplette Datei auslesen und temporär abspeichern, zusätzlich die neuen Zeilen dranhängen und dann mit Writefile einfach die Datei überschreiben. Lg, M0rgenstern |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kann es nicht sein dass Read und Write Position getrennt betrachtet werden ?
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
M0rgenstern |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ToeB: Und selbst wenn? Mit Seekfile ist er doch auf jeden Fall am Ende der letzten Zeile angekommen, da müsste wenigstens dort neuer Text erscheinen.
@Topic: Vielleicht noch ein Lösungsansatz: BlitzBasic: [AUSKLAPPEN] aktuelle_filesize = FileSize("recent.dat") Ist ungetestet, kam mir nur grade so. Lg, M0rgenstern |
||
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Bei mir funktioniert es nicht.
Code: [AUSKLAPPEN] aktuelle_filesize = FileSize("recent.dat")
iKeinvorschub = 0 sp_zu = OpenFile("recent.dat") SeekFile (sp_zu, aktuelle_filesize-1) If ReadByte (sp_zu)<>10 Then iKeinvorschub = 1 SeekFile (sp_zu, aktuelle_filesize-1) If iKeinvorschub = 1 Then WriteLine sp_zu, "" WriteLine sp_zu, "asdf" WriteLine sp_zu, "asdf2" CloseFile sp_zu Das Problem ist immernoch, ich werde mal schauen ob ich es mit WriteFile und ReadFile(ohne OpenFile) hinbekomme. Meld mich dann wieder Liebe Grüss RoLo |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
mit Writeline wird immer ein ASCII 13 = Carriage Return und ASCII 10 = Linefeed angehängt Ich habe mal eine einfache Function geschrieben... BlitzBasic: [AUSKLAPPEN] StringAnHaengen("recent.dat" ,"ADSF") Achte darauf das die Datei nicht anderweitig benutzt wird, weil es sonst zu Problemen führt Bei dem programmcode mit BlitzBasic: [AUSKLAPPEN] SeekFile (sp_zu, aktuelle_filesize-1) wird ja grundsätzlich das letzte Byte gelöscht, egal ob es 10 ist oder nicht! Wenn du per Hand in der Datei etwas änderst mußt du den Cursor in eine neue Zeile (als letztes Zeichen) setzten |
||
[BB2D | BB3D | BB+]
|
RoLo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok vielen Dank für die ganzen Antworten ich habe es jetzt zum laufen gebracht - frag mich nicht wie ![]() Gruss RoLo |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group