Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27

    [c] posizionamento all'interno di un file in scrittura

    Salve a tutti sono nuovo del forum... spero di avere postato la mia domanda nella sezione adeguata... programmo da qualche mese in c e non sono ancora bravissimo... volevo chiedervi...come posso posizionarmi all' interno di un file in scrittura... in lettura ok nessun problema... uso fseek e non mi dà nessun problema... ma come faccio in scrittura? vi faccio un esempio stupido...


    per la lettura:
    codice:
    #include <stdio.h>
    int main() {
        char scritta [10];
        FILE *leggi= fopen("file.txt", "r");
        fseek(leggi,0,SEEK_SET);
        fgets(scritta,0,leggi);
        printf("%s", scritta);
        fflush(leggi);
        fclose(leggi);
        getch();
        return 0;
    }
    e così leggiamo un file ... spero di aver scritto giusto visto che non l'ho compilato... spero non ci siano errori...

    se per la scrittura faccio una cosa simile non fa quello che vorrei facesse...
    codice:
    #include <stdio.h>
    int main() {
        char scritta [10];
        FILE *leggi= fopen("file.txt", "a");
        fscanf(stdin, "%s",scritta);
        fseek(leggi,2,SEEK_SET);
        fprintf(leggi,"%s", scritta);
        fflush(leggi);
        fclose(leggi);
        getch();
        return 0;
    }
    ad esempio... sul .txt c'era già scritto "ciao" ... andando al secondo carattere in teoria se nel programma scrivo un altro "ciao"... dovrei trovarmi scritto sul .txt: "ciciaoao" ... era un esempio stupido ma era per farvi capire... ma invece mi ritrovo scritto: "ciaociao"... quindi... come posso risolvere il tutto? Grazie mille a chi mi risponde

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    FILE *leggi= fopen("file.txt", "a");

    Con "a", apri il file in scrittura ma il puntatore si trova alla fine del file.
    Se vuoi che si posizioni all'inizio, usa "w"

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Grazie mille adesso provo poi ti faccio sapere ... grazie ancora

  4. #4

    Moderazione

    Il codice va specificato tra tag [CODE] ... [/CODE], altrimenti perde l'indentazione.

    Ora correggo io, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Scusa Mitalysono nuovo e non lo sapevo...


    @boots si... mettendo w al posto di a è un problema risolto... maaaaaa fseek non mi funziona in scrittura... solo in lettura u.u

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da wasd28
    @boots si... mettendo w al posto di a è un problema risolto... maaaaaa fseek non mi funziona in scrittura... solo in lettura u.u
    Definisci "non mi funziona in scrittura"... Che errori ti da?

    Comunque:
    For streams open in text mode, offset shall either be zero or a value returned by a previous call to ftell, and origin shall necessarily be SEEK_SET.

    Da qui: http://www.cplusplus.com/reference/cstdio/fseek/
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2013
    Messaggi
    27
    Originariamente inviato da Alex'87
    Definisci "non mi funziona in scrittura"... Che errori ti da?
    Allora il compilatore non mi dà nessun errore... ma fseek() non fa quello che vorrei forse serve un'altra funzione... Allora... mi spiego meglio... esiste il file "file.txt" dove all interno c'è scritto "ciao" (ovviamente è un esempio)... eseguendo questo programma:
    codice:
    #include <stdio.h>
    int main() {
        char scritta [10];
        FILE *leggi= fopen("file.txt", "w");
        fscanf(stdin, "%s",scritta);
        fseek(leggi,2,SEEK_SET);
        fprintf(leggi,"%s", scritta);
        fflush(leggi);
        fclose(leggi);
        getch();
        return 0;
    }
    e durante l'esecuzione del programma scrivo: "wasd28"... io da fseek() mi aspetterei di trovarmi sul .txt la seguente scritta "ciwasd28ao", poichè va a scrivere wasd28 dopo il secondo carattere di ciò che già esisteva prima... invece mi trovo scritto: " wasd28" ... notate i due spazi vuoti dati dall fseek() prima della scritta... come faccio a fargli scrivere "ciwasd28ao" ... ovvero fare in modo che non cancelli ciò che esisteva prima?

  8. #8
    Hai provato a controllare qui ?
    L' esempio è proprio attinente al tuo caso.

    L'unico problema è che ti cancella tutto quello che è scritto dopo.

  9. #9
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da lovesemiramide
    Hai provato a controllare qui ?
    L' esempio è proprio attinente al tuo caso.
    E' il link che gli ho postato io poco sopra

    Originariamente inviato da lovesemiramide
    L'unico problema è che ti cancella tutto quello che è scritto dopo.
    ??
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il problema è che non puoi inserire all'interno di un file dei dati tra dati già esistenti.

    Quell'esempio è un po' fuorviante in quanto sostituisce un certo numero di caratteri con lo stesso numero di caratteri e non è quello che vuoi fare tu.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.