Problem mit OpenFile - SeekFile - WriteLine
Übersicht BlitzBasic
 BlitzBasic  Allgemein
 Allgemein| RoLoBetreff: Problem mit OpenFile - SeekFile - WriteLine |  So, März 20, 2011 1:12 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 |  So, März 20, 2011 1:29 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 |  So, März 20, 2011 1:38 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 |  So, März 20, 2011 1:41 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 |  So, März 20, 2011 1:42 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 |  So, März 20, 2011 1:47 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" |  So, März 20, 2011 1:48 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 |  So, März 20, 2011 1:56 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 |  So, März 20, 2011 2:00 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 |  So, März 20, 2011 2:01 Antworten mit Zitat   | |
|---|---|---|
| ok und nochmal für einen der schwer von Begriff ist   | ||
|   | M0rgenstern |  So, März 20, 2011 2:04 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 |  So, März 20, 2011 2:06 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 |  So, März 20, 2011 2:40 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 |  So, März 20, 2011 3:05 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 |  So, März 20, 2011 3:22 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 |  So, März 20, 2011 9:35 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 |  So, März 20, 2011 9:49 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 |  So, März 20, 2011 10:55 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 |  So, März 20, 2011 14:40 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
 BlitzBasic
 BlitzBasic  Allgemein
 Allgemein
					Powered by phpBB © 2001 - 2006, phpBB Group
				



