Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Datein im alten C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.04.2006, 17:41 Uhr
~Cobalt
Gast


Also ich persönlich programmiere noch immer in BC 3.1 (denke ich )
Konsolenanwendung

Meine Befehle dir ich für die Binäredateiverwaltung verwende sind:

fread
fopen
fseek
fclose


Mein Problem:

Ich erstelle Datensätze kann sie auslesen und ändern.

Mein Problem liegt dabei EINEN Datensatz zu löschen.

Ich schaffe es per fseek den Datensatz zu finden.

Eine Möglichkeit die mir eingefallen wäre einfach alle Datensätze in eine neue Datei umzu schreiben außer die gelöschte. Nachher einfach mit unlink() die alte Datei löschen und mit rename() die neue Datei umbenennen.

Allerdings mein Problem ist das die 2 Datei ja die selbe Größe hat wie die Alte. Das will ich nicht.


Die 2 Möglichkeit:

Einfach den zu löschenden Datensatz suchen und alle nachfolgenden überschreiben (also eines "raufsetzten". Das Problem wie schließe ich die Datei am Schluss richtig ab ?


oder gibt es einen Befehl der den Datensatz automatisch löscht ?


Für eine Antwort wäre ich wirklich Dankbar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.04.2006, 17:58 Uhr
theosoft




Zitat von ~Cobalt:

Eine Möglichkeit die mir eingefallen wäre einfach alle Datensätze in eine neue Datei umzu schreiben außer die gelöschte.

yep, genau so mache ich das

--
ifS (immer fröhliches Schaffen)
theosoft
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.04.2006, 18:01 Uhr
~Cobalt
Gast


Wenn ich zum Beispiel 10000 Datensätze habe mit jeweils 35 Einträgen wäre das schon etwas umständlich finde ich....

Es gibt immer eine bessere Lösung oder ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.04.2006, 18:14 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
bei einem alten programm ging das so:

data.idx
data.db

index sah "umgewandelt" in etwa so aus:

nr offset
nr offset
nr offset
nr offset
nr offset

die .db sah dann halt so aus:

nr data
nr data
nr data
nr data
nr data
nr data

Wenn ein neuer datensatz hinzugefügt wird, wird die idx durchlaufen bis ein "freier" platz gefunden ist (nr = 0) bzw ein neuer angehängt. in der db wird entweder das offset des nicht benutzten datensatzs benutzt oder halt auch eben hinten angehängt.

Wenn du nun einen datensatz löscht musste "nur"

db-datensatz nullen (also satz mit 0en überschreiben), ist sauberer, dann nr in der index mit 0 überschreiben. Fertig.

Das suchen nach einem Datensatz läuft dann über die "kleine" idx die selbst bei 10000 einträgen höchstens auf 1-2kb anschwillt.

Es empfiehlt sich jedoch ne Routine zur "Reorganisation" einzubauen, die dann die Datendateien komplett neu schreibt, also in 2 tempfiles aus den daten diese sortiert schreibt, und dann die alten löscht und die neuen wieder umbenennt.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
25.04.2006, 18:18 Uhr
~Cobalt
Gast


Hmm also doch "kopieren" und umbenennen.


Kann man net ienfach EOF hinten reinschreiben ?


Aber danke muss ich wohl ein Unterprogramm schreiben.

Danke für die schnelle Hilfe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
25.04.2006, 18:22 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja die reorganisation muss ja nicht so oft getan werden, rein theoretisch nie, nur um datenfehler vorzubeugen ist das halt gedacht.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
25.04.2006, 18:31 Uhr
~Cobalt
Gast


Danke dir mein Leher wird sich freuen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: