Jezyk C: zapisywanie na poczatku, a nie na koncu pliku. Jest do tego funkcja w stdlib?

0

Witam,
Mam nastepujacy problem: zastanawiam się czy w jezyku ANSI C można z użyciem STDIO zapisywac pliki tak, aby:

rewind();
fprintf(fileobject, „Chce zapisac ten tekst przed danymi w pliku\n”);

Probowalem z fseek() i rewind(), ale to nie zmienia dzialania fprintf. Dane trafiaja na koniec, a nie na poczatek pliku.

Czy mozna zrobic to z uzyciem standardowej biblioteki?

0

Uruchamiaj fopen z parametrem "a+"?

0

Fragment pliku odpowiedzialny za wczytywanie wyglada nastepujaco:

    FILE* fp;
    if( ((fp = fopen("filename.txt", "a+"))) == NULL ) {
      fprintf(stderr, "Error opening file");
      return false;
    }
    
    // zapisz na poczatku pliku

    fprintf(fp, "%s\n", line);
    fclose(fp);
0

To nie dziala.

Napisalem program, aby zademonstrowac:

#include<stdio.h>
#include<string.h>

int main()
{
    char line[20];
    FILE* fp;
    int i;
    int t; // number of tests
    scanf("%d", &t);
    getchar(); // fix stdin
    
    if( ((fp = fopen("tmp.txt", "a+"))) == NULL ) {
      fprintf(stderr, "Nie mozna otworzyc\n");
      return 1;
    }
    
    for(i = 0; i < t; i++) {
      fgets(line, 19, stdin);
      line[strlen(line)-1] = '\0'; // delete new line character
      // write in the begin of the file
      rewind(fp);
      fprintf(fp, "%s\n", line);
    }
    
    fclose(fp);
    
    return 0;
}

Testy:

4
pierwszy wpisany
drugi wpisany
trzeci wpisany
 

W pliku otrzymuje:

pierwszy wpisany
drugi wpisany
trzeci wpisany
czwarty wpisan
0

Nie ma możliwości wstawiania nawet pojedynczego znaku w środek pliku, możesz dopisać do końca, lub nadpisać jakiś obszar pliku.
Jeżeli jednak musisz coś wstawić coś w środek pliku to jedyną metodą jest nadpisanie całej reszty po miejscu wstawienia.
Rozwiązać można to na dwa sposoby:

  1. tworzysz nowy plik w który kopiujesz część przed miejscem wstawienia, potem wpisujesz cześć wstawianą, a potem część po miejscu wstawienia. Kasujesz stary plik, zmieniasz nazwę nowego pliku na stary.
  2. wczytujesz do pamięci lub do innego pliku cześć po miejscu wstawienie, wpisujesz wstawkę, wpisujesz z pamięci lub z innego pliku resztę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1