Gå til innhold

Skrive til fil helt i begynnelsen


Anbefalte innlegg

Skrevet

jeg har lest litt om 'w', 'a' osv. , og hva som brukes ved diverse anledninger. Jeg har prøvd ut en del av dem, men de oppfører seg ikke helt som jeg forventet, så jeg spør her slik at noen kan gi meg et konkret svar.

 

Jeg har en tekstfil som jeg lagrer innlegg på. Men hvilken modus skal jeg åpne i hvis jeg vil at det jeg skriver skal skrives helt i starten av filen og ikke til slutt? Er dette noe jeg kan styre med modusene, eller må jeg løse det på en annen måte?

Videoannonse
Annonse
Skrevet

fopen('fil.txt', 'r') skal sette "markøren" i starten av filen.

 

Om den ikke gjør det, kan du lage noe som leser inn filen, legger til den på slutten av den nye filen du skal skrive, skriver til en ny fil, sletter den gamle, og endrer navn til hva den gamle het.

Skrevet

Hm.. det første du sier er jo når du skal lese? Jeg tenkte på når man skriver til fila.. Er det sånn at alt blir skrevet helt til slutt på fila? Eller kan man kontrollere dette ved å sette noe annet? :hmm:

Skrevet

Du må jo åpne filen før du kan skrive til det.

 

Tenk deg det som er Word-dokument. Vanskelig å skrive til den, uten å åpne det i Word. Når du har åpnet den, så setter du markøren i plass. "r" skal plassere denne i toppen, og når PHP klaprer på tastaturet, kommer dette i starten. "w" plasserer dette i slutten.

Skrevet

PHP-støtter av svært naturlige grunner IKKE skriving i starten av filen. Har selv fundert litt på det her.

$content = $new.'\n'.file_get_contents("file.txt");
$fp = fopen('file.txt', 'w');
fwrite($fp, $content);
fclose($fp);

Dette har bare et problem. Sett at man skal jobbe med en fil som er større enn minne-grensa i PHP? Vel, det finnes en løsning på det også:

rename("file", "old_file");
$fp_new = fopen("file", "w");
$fp_old = fopen("old_file", "r");
fwrite($fp_new, $new_content);
while (!feof($fp_old))
{
 $data = fread($fp_old, 1048576); //opptil 1MiB data lese omgangen, bare for å slippe å loope sånn veldig
 fwrite($fp_new, $data);
}
fclose($fp_old);
fclose($fp_new);
unlink("old_file");

Skrevet
mener å huske at jeg brukte a+ for å skrive til starten av en fil.

6908329[/snapback]

a+ er append med leserettigheter. Den vil legge nytt innhold tilslutt i fila.

Skrevet (endret)

Hjelper lite hvis du skal jobbe med store filer, og ikke minst når man skal hente ut eller legge til linjer og ikke x bytes.

Endret av Ernie
Skrevet

nei, mener at det inni fila skal være reverst, og når du henter ut så må du reversere tilbake. og når du skriver til slutten av fila så skriver du egentlig på begynnelsen. og da funker det med linjer også.

 

(mange 'og')

Skrevet

hmm, det stemmer... man kan jo ikke streame linjer hvis alt er omvendt... og man kan sikkert ikke telle antall linjer uten å lese fila....

Skrevet
Du må jo åpne filen før du kan skrive til det.

 

Tenk deg det som er Word-dokument. Vanskelig å skrive til den, uten å åpne det i Word. Når du har åpnet den, så setter du markøren i plass. "r" skal plassere denne i toppen, og når PHP klaprer på tastaturet, kommer dette i starten. "w" plasserer dette i slutten.

6898483[/snapback]

 

Dette var en noe merkelig oppfatning av hva "open-mode" betyr. Se dokumentasjonen under fopen for den korrekte forklaringen. "r" og "w" står for hhv "read" og "write" og er ikke primært knyttet til plassering av pointer selvom de også har en default plassering av denne.

Skrevet (endret)

Takk for mange svar, men ennå litt små usikker på hvordan jeg skal løse det.. Får kanskje teste ut Ernies forslag først:)

Endret av LBoN

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...