Forum huvudsida -> Programmering -> Editera post i binärfil (C++)
Sidor: 1
Omega | 20:33 - 5:e Mars 2007 | Post #1 | |
Medlem Inlägg: 42 Skicka PM |
Hej! Jag försöker uppdatera en enskild post i en binärfil, men lyckas endast med att skriva sönder filen, så att endast posten jag uppdaterade finns kvar. ,,r det någon flagga vid öppning av filen jag saknar eller något annat? Jag använder g++, operativsystem Ubuntu. -ppnar filen för läsning, söker reda på posten och sparar positionen.
-ppnar filen för skrivning, går till sparad position, skriver, och stänger filen.
------------------------- Fall omkull sju gånger och res dig upp åtta. Senast redigerad 20:44 - 5:e Mars 2007 |
Independence | 20:54 - 5:e Mars 2007 | Post #2 | |
Administratör Inlägg: 1800 Skicka PM |
Hur fungerar det här egentligen (char*)&tempEmployee ? Inte för jag kan nåt om sånt här, men det känns som man borde ha någon serialize() eller nåt? ------------------------- Vi är riddarna som säger fiskbulle! |
Omega | 21:00 - 5:e Mars 2007 | Post #3 | |
Medlem Inlägg: 42 Skicka PM |
Employee är en enkel klass som ser ut så här.
Och funktionerna read och write tar endast emot en pekare av typen char *, varför en cast görs på den pekare som & ger. ------------------------- Fall omkull sju gånger och res dig upp åtta. |
ozamosi | 21:44 - 5:e Mars 2007 | Post #4 | |
Administratör Inlägg: 1129 Skicka PM |
Jag har för mig att alla filer som öppnas bara för skrivning töms helt och hållet i öppningsögonblicket. Jag minns inte hur man löser det. ------------------------- Ljusblå |
Slash | 10:32 - 6:e Mars 2007 | Post #5 | |
Medlem Inlägg: 141 Skicka PM |
Det är väl oftast inte att rekommendera att skriva ut en hel strukt i ett svep, p.g.a. padding. Det kan innebära att om du kompilerar ditt program med en annan kompilator så går de gamla datafilerna ej att läsa. Det bästa är, som sagt, någon typ a serializering. ,,r inte så avancerat som det låter, det är bara att skriva ut varje variabel för sig, så att du senare kan återskapa objektet. Till exempel:
Sen använder du bara dig av
Vidare så är det i allmänhet lättast, snabbast och snyggast att läsa in all data i minnet, modifiera datat där och sedan skriva ut allt till din fil i slutet. Detta är endast dåligt om du skulle ha enormt stora datamängder. EDIT. Stavfel ------------------------- Ingen sigantur! Senast redigerad 15:52 - 6:e Mars 2007 |
Omega | 18:48 - 6:e Mars 2007 | Post #6 | |
Medlem Inlägg: 42 Skicka PM |
Hej! Ozamozi, jag har inte hunnit testa ditt tips ännu. Skall testa att använda fstream och både ios::in och ios::out vid öppingen för att se om det blir någon skillnad. Slash, tipset om paddingen och serialisering skall jag lägga på minnet, hade faktiskt inte tänkt på det. Men jag tror inte att det är det som är problemet nu, då jag håller mig till en kompilator. Jag har inga problem att läsa skriva till filen, och sedan kunna läsa tillbaka det skrivna, förutsatt att jag skriver filen från början till slut. Problemet är att jag vill kunna gå in i filen och skriva om en specifik post utan att skriva om hela filen. Jag hade tänkt att använda read, tellg, seekp och write i den ordningen för att uppdatera posten, men filen jag skriver till innehåller sedan alltså bara den senaste posten. ------------------------- Fall omkull sju gånger och res dig upp åtta. |
Slash | 20:09 - 6:e Mars 2007 | Post #7 | |
Medlem Inlägg: 141 Skicka PM |
Citat av ozamosi: Jag har för mig att alla filer som öppnas bara för skrivning töms helt och hållet i öppningsögonblicket. Jag minns inte hur man löser det. ios::app ska inte trunkera innehållet vad jag minns. Detsamma verkar även gälla för ios::ate. -ppna den får både skrivning och läsning bör ju också fungera ja. ------------------------- Ingen sigantur! Senast redigerad 20:10 - 6:e Mars 2007 |
Sidor: 1
Forum huvudsida -> Programmering -> Editera post i binärfil (C++)
Du får inte posta i den här tråden | Till toppen
Datum
2024-05-05 20:57
Vecka: 18
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.