Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

C++ direkter Zugriff auf Dateien

(Anonym) / 11 Antworten / Baumansicht Nickles

Hallo!!
Ich hoffe mir kann jemand weiterhelfen...
Kann ich auch auf Textdateien direkt zugreifen oder nur auf Binärdateien, wie funktioniert das genau, usw...
Bräuchte dringend Informationen darüber...danke schon mal im Voraus.
mfg Elmar

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „C++ direkter Zugriff auf Dateien“
Optionen

Wo soll da ein Unterschied sein? Natürlich kannst du das!

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „Wo soll da ein Unterschied sein? Natürlich kannst du das!“
Optionen

Ok, danke erstmal...
Aber hier kommt schon die nächste Frage:
Muss ich meine Daten mit fwrite() in die Datei schreiben, um direkt darauf zugreifen zu können?
fwrite schreibt die Daten (laut ADMIN) in ihrer inneren Form in die Datei...also keine ASCII Zeichen...oder wie darf ich das verstehen..
Oder hab ich den Unterschied zwischen Binärdatei und Textdatei nicht verstanden...

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „Ok, danke erstmal... Aber hier kommt schon die nächste Frage: Muss ich meine...“
Optionen

vielleicht hab ich mich zuvor undeutlich ausgedrückt...
ich möchte DIREKT auf die Daten zugreifen nicht SEQUENTIELL..

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „vielleicht hab ich mich zuvor undeutlich ausgedrückt... ich möchte DIREKT auf...“
Optionen

und außerdem wollt ich vorher nicht ADMIN sonder ADIM schreiben..

bei Antwort benachrichtigen
thomas woelfer (Anonym) „C++ direkter Zugriff auf Dateien“
Optionen

also ich weiss nicht genau was du willst, aber ich versuchs mal. es gibt nur zwei unterschiedliche arten von datein: binaer und ascii. im wesentlichen ist der unterschied der, das du in binaerdateien den filepointer byteweise bewegen kannst - dementsprechend kannst du an beliebige stellen schreiben und lesen. ascii kannst du nur zeichen bzw. zeilenweise lesen und schreiben - und auch nicht an beliebigen stellen.

was genau ist denn nun deine frage?
WM_QUERY
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
(Anonym) thomas woelfer „also ich weiss nicht genau was du willst, aber ich versuchs mal. es gibt nur...“
Optionen

ich denke mal, du hast meine Frage soeben beantwortet...
Das heißt also, der direkte Zugriff auf Dateien (also random access)
ist nur auf Dateien möglich, die im Binärmodus vorliegen, also mit z.B. fopen(c:\\datei,"wb") geöffnet worden sind..
Lieg ich da richtig?

meine nächste Frage war dann, ob ich diese Datei, auf die ich direkt(also auf einen bestimmten datensatz) zugreifen will, mit fwrite und fread behandeln muss.
Oder kann ich auch mit fprintf und fscanf zugreifen.

noch zur Ergänzung:
ich möchte dann mit fseek den filepointer auf einen bestimmten datensatz zeigen lassen....das geht dann also nur mit einer binärdatei....oder nicht?

bei Antwort benachrichtigen
thomas woelfer (Anonym) „C++ direkter Zugriff auf Dateien“
Optionen

random access ist nur moeglich wenns nicht als textmode geoeffnet wurde. (hatte oben irgendwas von ascii geschrieben, das ist natuerlich bloedsinn... der richtige terminus ist textmode - aber inhaltlich passt das so.)

fprint() und fscanf() sind fuer textmode files. wenn du da datensaetze drin hast ist es sinnvoller die als strukturen zu definieren und die dann komplett zu lesen und zu schreiben. dabei bist du aber nicht auf fread und fwrite beschraenkt - die rtl hat da eine ganze reihe an funktionen. am ende laueft es aber immer auf ein read( &struct, sizeof(struct)) und dazu passendes write() hinaus.

fseek() frage: das ist richtig.

WM_HOPETHISHELPS
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
(Anonym) thomas woelfer „random access ist nur moeglich wenns nicht als textmode geoeffnet wurde. hatte...“
Optionen

Ok, vielen Dank für die Infos...
Hat mir echt weitergeholfen
mfg Elmar

bei Antwort benachrichtigen
(Anonym) thomas woelfer „random access ist nur moeglich wenns nicht als textmode geoeffnet wurde. hatte...“
Optionen

Eins ist mir doch noch unklar...
Du schreibst, dass random access nur möglich ist, wenn das file nicht im textmode geöffnet wurde.
Weiter unten schreibst du aber, dass ich in Textdateien auch Datensätze haben kann (klingt für mich zumindestens so).

Ist es nicht so, dass die Fukntionen fread und fwrite für random access sind?? - kann ich also auch auf Textdateien direkt zugreifen?

bei Antwort benachrichtigen
thomas woelfer (Anonym) „C++ direkter Zugriff auf Dateien“
Optionen

nope, falsch verstanden. fprintf() und fscanf() sind fuer textmodus files. _wenn_ du in deinen files datensaetze drin hast, dann solltest du das binaer machen.... ok ?

davon ab _kannst_ du natuerlich auch auf textdateien mit fread/fwrite zugreifen - allerdings nur dann sinnvoll, wenn du die laenger aller zeilen kennst, d.h., wenn du im textmodus so tust als ob die records haettest. das macht allerdings nicht viel sinn...

WM_HOPETHISHELPS
thomas woelfer

this posting contains no tpyos.
bei Antwort benachrichtigen
(Anonym) thomas woelfer „nope, falsch verstanden. fprintf und fscanf sind fuer textmodus files. _wenn_ du...“
Optionen

Ok, danke...
Das heißt also, Datensätze kann ich nur mit fwrite in eine Datei schreiben.
Mir ist nämlich der Ausdruck Datensatz nicht ganz klar...
Eine Zeile ist doch kein Datensatz oder doch??
Mich verwirrt diese ganze Sache..........

bei Antwort benachrichtigen