18. december 2001 - 11:39Der er
17 kommentarer og 1 løsning
MFC Filbehandling
Hej Jeg har et program, som går ind og laver en masse data i en fil. Når programmet afsluttes, skal der på den første linje i filen, skrives nogle værdier. Til dette bruger jeg CStdioFile, problemet er at den overskriver data i filen, byte vis. Er der nogen der har en løsning til hvordan man undgår dette. Dvs jeg vil gerne have den til at \"skubbe\" dataene, så den ikke overskriver noget!
Man kan selvfølgelig streame filen på ny, men jeg syntes ikke det er den rigtige løsning, der må være en bedre.
Linjen jeg skal skrive i toppen kan variere, da det er max værdier i integers.
Jeg har også tænkt på at lave en temp fil og så streame den en gang til, men der må da være en løsning. Tænk hvis filen fylder 10 mb så vil det tage temmelig lang til at streame den igen. :)
Jeg tror ikke du kan indsætte data og derved flytte det andet. Det ville kræve at filen skal \"vokse baglens :-)\" (hvad jeg ikke tror er muligt) eller at den flytter alle \"10MB\" for hver byte du tilføjer i starten af fil ( hvilket ville være meget langsom).
En anden ting man kunne gøre er at ligge dem i en fil ved siden af, altså to filer, en med data og en med max værdier.
jpk >> sådan ser data ud efter den er blevet skrevet: 881 144 240 0 2380 585 00 240 5 91 20 60 86 240 4 142 31 anden linje skulle gerne starte på 20!
chries >> Hvad med tekstbehandlings programmer, det kan da ikke passe at de skriver det hele ned, hvergang man tilføjer noget? Jeg er ikke meget for at have en ekstra fil for hver db, da filstrukturen allerede er ret omfattende! ;)
den med \\n går ikke, det vædder jeg 50 point på :-) Jeg er meget sikker på at rene tekst filer bliver skrevet helt ned igen ved gem. (eller fra første ændring i filen)
Okay, du kan sikkert finde et maksimalt antal tegn første linie fylder. Så skrive det antal spaces først, det virker i hvert fald! fileop.WriteString(\" \\n\");
Du skriver at din filstruktur er kompliseret, hvad med at bruge compound filer? En compound fil har en intern filstruktur, det er sådan nogle fx Word bruger, så kan man skrive en stream uden at tænke på en anden.
Er det sådan at den fil du skriver til er i et allerede defineret format, eller har du frihed til at ændre lidt på det?
Hvis du kan ændre lidt på formatet kunne du jo evt. gøre følgende: 1) Reserver plads til et tal (En fil-position) 2) Skriv alle dine data 3) Skriv max-værdierne 4) Skriv startposition for max-værdierne i den reserverede plads
Hvis du gemmer max-positionen binært skal du jo bare reservere 4 bytes. Hvis du gemmer max-positionen som tekst skal du vel bare reservere plads nok til det største tal (10 cifret tal)
twn >> Din observation i forhold til at \"flytte\" de 10 MB til slutningen er helt korrekt - det ER nødvendigt. Den måde de fleste programmer \"omgår\" problemet evd, er ved at reserver en \"blok\" (f.eks. 1024 tegn) i starten af filen til formålet, og så blot sikre dig at din kontrolstruktur ikke overstiger de 1024 bytes der er sat af til det. Nadre bygger som jpk beskriver det, en slag index-struktur i starten af filen (stadig f.eks.1024 bytes) og lader den pege på de enkelte afsnit. Herved KAN din kontrolstruktur jo godt ligge til sidst i filen - du skal så bare sørge for at der i de første 1024 bytes ligger et offset der fortæller dig hvor langt frem i filen du skal, for at få fat i kontrol-strukturen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.