le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌟🌟Home page dell'autore:effimeri__
🌟🌟Colonna di appartenenza:Linguaggio C
1. Apertura e chiusura di file
3. File di testo e file binari
4. Funzioni che controllano l'apertura e la chiusura dei file
2. Lettura e scrittura sequenziale di file
3. Lettura e scrittura casuale di file
4. Determinazione della fine della lettura del file
Quando scriviamo programmi, spesso memorizziamo i dati in variabili. Se il programma esce e la memoria viene recuperata, questi dati andranno persi. Quindi esiste un modo per salvare in modo persistente questi dati in modo che esistano ancora quando il programma viene riaperto? La risposta è si. Cosa può fare questo è:Operazioni sui file。
I dati del programma devono essere inviati a dispositivi esterni e devono anche essere immessi da dispositivi esterni. Per diversi dispositivi, i metodi di input e output sono diversi. Per facilitare le nostre operazioni su vari dispositivi di input e output, abbiamo il concetto altamente astratto di "stream". Nel linguaggio C, le operazioni di input e output su file, schermi, tastiere, ecc. vengono tutte eseguite tramite "flussi". In generale, se vogliamo scrivere dati o leggere dati, dobbiamo aprire lo stream.
Quando viene avviato un programma in linguaggio C, il valore predefinito ètre flussiGià aperto per noi:
standard-din--Flusso di input standard, input dalla tastiera nella maggior parte dei casi.
uscita standard--Stream di output standard, nella maggior parte dei casi output sul monitor.
standardizzazione--Flusso di errore standard, visualizzato sul monitor nella maggior parte dei casi.
Poiché questi tre flussi sono stati aperti per impostazione predefinita, possiamo eseguire direttamente operazioni di input e output utilizzando funzioni come scanf e printf.
Questi tre flussi hanno anche dei tipi.Puntatore del file (FILE*) .Quando eseguiamo operazioni sui file, passiamoLa variabile puntatore file può trovare indirettamente il file ad essa associato.。
A seconda di come sono organizzati i dati, vengono chiamati i file di datifile di testoOfile binario . I dati vengono archiviati in forma binaria nella memoria,Se viene inviato a un file di archiviazione esterno senza conversione, lo èfile binario。
Se è necessario memorizzarlo in codice ASCII in una memoria esterna, è necessario convertirlo prima della memorizzazione.Un file memorizzato sotto forma di caratteri ASCII èfile di testo。
Come viene archiviato un dato in un file?
I caratteri vengono sempre memorizzati in formato ASCII e i dati numerici possono essere memorizzati in formato ASCII o binario. Ad esempio, se c'è un intero 10000, se viene emesso sul disco sotto forma di codice ASCII, occuperà 5 byte sul disco (un byte per ogni carattere), mentre se viene emesso in forma binaria, occuperà solo 4 byte sul disco.
Dopo aver compreso questi prerequisiti, arriviamo al punto: aprire e chiudere file. Il linguaggio C fornisce due funzioni, responsabili rispettivamente dell'apertura e della chiusura dei file. I prototipi sono i seguenti:
apri un file:FILE * foaperto ( const char * nome file, const char * modalità );
Chiudi il file:interno fchiudi ( FILE * flusso );
La funzione fopen ha due parametri,Il primo parametro è espresso sotto forma di stringanome del file, il secondo parametro è il fileMetodo aperto, rappresentato da una stringa .Quando utilizziamo questa funzione, dobbiamo creare un filevariabile del puntatore del file Per ricevere, quando il file non si apre, restituisce un puntatore null. Per quanto riguarda le modalità di apertura, ecco le seguenti:
Metodo aperto | Senso | Se il file specificato non esiste |
"r" (sola lettura) |
Per inserire i dati, aprire un file di testo esistente
| Restituisce un puntatore nullo |
"w" (solo scrittura) |
Per generare i dati, aprire un file di testo
| Crea un nuovo file |
"a" (aggiungi) | Aggiungi dati alla fine del file di testo | Crea un nuovo file |
"rb" (sola lettura) | Per inserire i dati, aprire un file binario | Restituisce un puntatore nullo |
"wb" (solo scrittura) | Per generare i dati, aprire un file binario | Crea un nuovo file |
"ab" (aggiungi) | Aggiungi dati alla fine di un file binario | Crea un nuovo file |
"r+" (lettura e scrittura) | Per leggere e scrivere, aprire un file di testo | Restituisce un puntatore nullo |
"w+" (leggere e scrivere) | Per leggere e scrivere, creare un nuovo file di testo | Crea un nuovo file |
"a+" (leggere e scrivere) | Apri un file e leggi e scrivi alla fine del file | Crea un nuovo file |
"rb+" (lettura e scrittura) | Apri un file binario per la lettura e la scrittura | Restituisce un puntatore nullo |
"wb+" (lettura e scrittura)
| Per leggere e scrivere, crea un nuovo file binario | Crea un nuovo file |
"ab+" (leggere e scrivere)
| Apri un file binario e leggi e scrivi alla fine del file | Crea un nuovo file |
Per la funzione fclose, il suo parametro è il puntatore al file, che viene utilizzato per chiudere il file puntato dal puntatore al file.
Successivamente, proviamo ad aprire e chiudere un file:
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");
- if (pf == NULL)//文件打开失败则退出程序
- {
- perror("fopen");
- return 0;
- }
- printf("文件打开成功n");
- fclose(pf);
- pf = NULL;//避免出现野指针,及时制空
- return 0;
- }
Si può vedere che poiché il metodo di apertura è "w", nel percorso appare un file denominato "test.txt".
Successivamente, introduciamo diverse funzioni perLeggere o scrivere dati in un file。
Nome della funzione | Funzione | Applicabile a |
fgetc | Funzione di immissione dei caratteri | Tutti i flussi di input |
inserimento | funzione di uscita dei caratteri | Tutti i flussi di output |
ottiene | Funzione di immissione della riga di testo | Tutti i flussi di input |
fputs | Funzione di output della riga di testo | Tutti i flussi di output |
scansione | Funzione di input del formato | Tutti i flussi di input |
stampaf | Funzione di output del formato | Tutti i flussi di output |
paura | Ingresso binario | Flusso di input del file |
scrivere | Uscita binaria | Flusso di output del file |
Successivamente proviamo a utilizzarescansioneEstampaffunzione:
Il primo parametro di queste due funzioni è un puntatore al file, che viene utilizzato per leggere e scrivere i dati del file. I parametri successivi sono gli stessi delle funzioni scanf e printf.
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fprintf(pf, "123456");//向文件中写入数据
- fclose(pf);
- pf = NULL;
- return 0;
- }
Come puoi vedere, i dati sono stati scritti nel file. Successivamente utilizziamo la funzione fscanf per stampare i dati del file sullo schermo:
- #include <stdio.h>
-
- int main()
- {
- char str[20] = { 0 };
- FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fscanf(pf, "%s", str);//读取数据到str当中
- printf(str);
- fclose(pf);
- pf = NULL;
- return 0;
- }
La funzione della funzione fseek èIn base alla posizione e all'offset del puntatore del fileposizionepuntatore del file . Il suo prototipo è il seguente:
int fseek ( FILE * flusso, long int offset, int origine );
Il suo primo parametro è il puntatore del file, il secondo parametro è l'offset relativo alla posizione impostata e il terzo parametro è la posizione impostata.
Il linguaggio C ne definisce treMacro, puoi sceglierne uno come terzo parametro:
SEEK_SET: posizione iniziale del file
SEEK_CUR: la posizione corrente del puntatore del file
SEEK_END: fine del file
Dopo aver individuato il puntatore del file, possiamo leggere o scrivere nella posizione specificata del file.
La funzione ftell viene utilizzata per restituireL'offset del puntatore del file rispetto alla posizione iniziale . Prototipo di funzione:
int lungo ftell ( FILE * flusso );
viene utilizzata la funzione di riavvolgimentoRiporta la posizione del puntatore del file all'inizio del file . Il suo prototipo di funzione:
void rewind ( FILE * stream );
1. Perfile di testo, possiamo prima usarefgetcLa funzione scorre i caratteri nel file finché non viene letto EOF, indicandoLa lettura del file termina。
2. Perfile binario,Noi usiamopauraLa funzione determina il suo valore restituito:È inferiore al numero effettivo da leggere? .Se è inferiore aLa lettura termina.
Per i due casi precedenti, il fileAlla fine della lettura, possiamo continuare a giudicareMotivo per cui è terminata la lettura del file . Introdurre due funzioni:feudoEferro。
feudoFunzione utilizzata perDetermina la fine della lettura del filemotivose o noÈ stata rilevata la fine del file . Il suo prototipo è il seguente:
int feof ( FILE * flusso );
Se il file è dovuto aLeggi fino alla fine del fileAl termine della lettura viene restituito EOF; negli altri casi viene restituito 0;
ferroFunzione utilizzata perDetermina la fine della lettura del filemotivose o noSi è verificato un errore I/O . Il prototipo è il seguente:
int ferror ( FILE * flusso );
Se il file è dovuto aSi è verificato un errore I/OAl termine della lettura viene restituito un valore diverso da zero; negli altri casi viene restituito 0;
Successivamente proviamo a scrivere un pezzo di codice per giudicare la fine della lettura del file:
- #include <stdio.h>
-
- int main()
- {
- int c = 0;
- FILE* fp = fopen("test.txt", "r");
- if (fp == NULL)
- {
- perror("fopen");
- return 0;
- }
- while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
- {
- putchar(c);
- }
- //判断读取结束的原因
- if (ferror(fp))
- puts("I/O错误n");
- else if (feof(fp))
- puts("文件读取结束n");
- fclose(fp);
- fp = NULL;
- return 0;
- }
Oggi abbiamo appreso le operazioni sui file, come aprire e chiudere file, scrivere dati o leggere dati da file, funzioni per regolare i puntatori dei file e determinare la fine della lettura dei file. Se ritieni che ciò che ha detto il blogger sia buono, lascia un piccolo mi piace e grazie per il tuo supporto❤❤❤