28. marts 2003 - 12:27Der er
12 kommentarer og 1 løsning
At skrive en linje til toppen af en fil.
Jeg har behov for at kunne tilføje en linje i toppen af en fil. Som udgangspunkt er der tale om ASCII tekst, men jeg vil også gerne vide hvordan det gøres, hvis der var tale om en datafil (ikke ASCII).
Jeg kunne selvfølgelig læse hele filen, så skrive min linje, der skal tilføjes og derefter skrive resten af filen igen - men der må da være en nemmere (hurtigere) metode ?
Husk på at en fil består af klumper af en eller anden størrelse (typisk 512/1024/2048/4096 bytes). Fil meta information indeholder oplysninger om hvilke klumper en fil består af. Det kan ikke lade sig gøre at sætte et vilkårligt antal bytes ind i den første klump uden at skubbe rundt på resten af data.
Enkelte operativ-systemer har fil-systemer hvor man har fil-typer med et logisk record niveau og et fysiske record niveay, hvor man godt kan ligge nyt data ind til sidst som en fysisk record, men at den logiske record bliver sat ind først.
Men standard DOS/Windows og Unix/Linux fil-systemer har ikke dette.
Hvis du ved hvor meget det fylder det du vil skrive ind bagefter kunne du jo afsætte plads til det i filen og så overskrive de tomme positioner bagefter.
Hvis filen ikke er så stor så bare genskriv den.
Hvis det er super vigtigt så find ud af hvordan dit OS lagre filer og "overtal" det til at sætte en block med dine nye data ind forrest, dette er dog en ekstrem løsninger der ikke er særlig portable.
Det er rigtigt, men jeg har også gjort en masse andre antagelser om det driis vil skrive:
ved at sætte en block ind af fast længde kan man så udfylde resten med space. at han som bruger overhovedet må gøre det. at der er system kald i has OS til at gøre, eller skal man virkelig hacke (skrive sin egen disk-I/O). at han selv har lavet filen i første omgang. etc.
OK - Hvis jeg så vælger at skrive til bunden af filen i stedet - hvordan gør jeg så, hvis jeg f.eks. vil læse de 2 nederste linjer, uden at skulle søge hele filen igennem for at finde ud af, hvor 2. nederste linje begynder ?
Hvis du skal finde de 2 sidste linier i filen læser du en klump fra byte sidst-X til byte sidst, hvor du er sikker på at X er stor nok til at indeholde de 2 linier.
Og så scanner du baglæns i filen efter linie-separator (LF, CR LF eller CR alt afhængig af hvilket system du kører på) og lokaliserer de sidste 2 linier.
Noget tilsvarende må også kunne laves med *stream.
NB: Bemærk at ovenstående kode er ikke helt portabelt. Åbne en fil binært og lede efter linie separator bør virke på både DOS/Windows og Unix/Linux, men der er fil-systemer hvor det ikke virker.
Jeg bruger noget lignende arne_v's eksempel. Tak for hjælpen.
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.