Ciao e bentornato.
In questa conferenza, voglio farlo parlare dell'accesso ai file.
Quindi i file su disco hanno un nome e le regole per la denominazione dei
file sono determinate dal sistema operativo.
Potrebbe essere necessario adeguarsi i nomi dipendono dal sistema operativo
in esecuzione nel programma.
Se il tuo programma è in esecuzione su Windows rispetto a Linux, anche
l'effettiva struttura delle directory è diversa.
Quindi, se usi gli slash in avanti o barre all'indietro,
devi regolarlo nel tuo programma.
Ma per la maggior parte, il file i nomi hanno relativamente le stesse
regole di denominazione e così via.
Ma c'è la possibilità che dovresti regolarlo.
Un programma fa riferimento a un file tramite un puntatore di file o un puntatore di flusso.
Dal momento che funziona su più di un semplice file
file, puoi effettivamente, lo abbiamo menzionato in precedenza, ma lo standard Le funzioni io funzionano su qualsiasi dispositivo.
Quindi si chiama puntatore di file, ma in realtà dovrebbe essere indicato come
un puntatore di flusso.
Associa un puntatore a un file con un file a livello di codice
quando il programma viene eseguito.
Quindi quello che finisci per fare sei tu crea un puntatore
all'interno del tuo programma, sarà di tipo file e rappresenterà il file quando lo leggi
e lo scrivi.
Usiamo questi puntatori di file come file modo più efficace per puntare effettivamente ai file al
contrario al nome perché il nome può
essere leggermente diverso.
Il puntatore rappresenterà a cosa sta effettivamente puntando.
E puoi riutilizzare i puntatori, per indicare file diversi in
occasioni diverse, il che, ancora una volta, era rappresentato dal nome del file.
Un puntatore di file punta a una struttura tipo di file che rappresenta un flusso.
Puoi davvero andare a vedere nella struttura del file per vedere tutto ciò che
è al suo interno.
Ma contiene informazioni del genere sia che tu voglia leggere,
scrivere o aggiornare il file, il indirizzo del buffer nella memoria in cui
stai archiviando i dati, a puntatore alla posizione corrente nel
file per l'operazione successiva.
Abbiamo detto che la posizione è importante perché è
lì che stai scrivendo e leggendo.
E puoi impostare tutte queste informazioni all'interno della struttura utilizzando le operazioni
sui file di input e output.
Le operazioni sui file di input output, quando apri un file, verrà
effettivamente specificato se vuoi leggere o scrivere.
E poi puoi anche cambiare il file posizione attuale utilizzando altri metodi
come seek e così via di cui parleremo.
Se desideri utilizzare più file simultaneamente nel tuo programma, devi creare
un file puntatore di file per ogni file.
Puoi solo riutilizzare il file puntatore se stai leggendo e scrivendo
in momenti diversi.
C'è un limite al numero di aperti file che puoi avere contemporaneamente.
Puoi guardare il limite nel file standard IO, c'è una
costante definita f open max it all dipende ancora dal sistema operativo su
cui stai eseguendo.
Ma di solito non vuoi creare e apri tantissimi file contemporaneamente.
Scrivere e leggere i file è un'operazione costosa perché stai scrivendo
sul disco rigido.
Non è veloce come scrivere la memoria, quindi
ci vuole tempo e può causare il tuo programma per essere meno reattivo in questo modo.
Non vuoi averne 10 i file si aprono
e scrivono su 10 file contemporaneamente.
Per aprire un file, questo sarebbe essere il primo passo che
fai prima di leggere e scrivere.
Quindi vuoi associare uno specifico nome del file
esterno con un intero puntatore finale attraverso un processo denominato apertura del file.
Il modo in cui apri un file e vedi se chiami la funzione f open.
Questo restituirà il file puntatore che puoi usare
per leggere e scrivere.
E ancora, il puntatore del file è puntare a un file
esterno specifico che si trova sul disco.
F aperto sta per prendere il nome del file.
La f aperta è ciò che devi fare prima di leggere / scrivere.
Di solito è la tua prima operazione.
E come con la maggior parte di queste funzioni, sono tutti definiti in standardio. h.
Ecco la definizione del bando aperto f.
Vedrai che al ritorno valore è un puntatore di file,
è tutto maiuscolo, la struttura del file.
Quindi il file in maiuscolo.
Noterai quindi che ci vuole un file un paio di parametri, ci vuole
un nome e una modalità e non preoccuparti di questo limitare che è solo più roba C11.
Ci vuole davvero solo il personaggio puntatore a un nome e una modalità.
Il primo argomento della funzione è un puntatore a
una stringa che è il nome del file, quindi sarà tra virgolette doppie.
È possibile specificare il nome in modo esplicito o utilizzare un puntatore a caratteri che contenga l'indirizzo
della stringa di caratteri.
Quindi tutto questo sta dicendo che potresti creare una stringa di caratteri e
inserirla assegnarla al testo letterale e poi passa la stringa
alla funzione oppure puoi inserirla all'interno del double virgolette all'interno della chiamata di funzione.
È possibile ottenere il nome del file tramite la riga di
comando anche come input dall'utente o definire come una costante del tuo programma.
Se è sempre lo stesso file stai leggendo per scrivere e
il nome non ha importanza, tu può semplicemente riferirsi a come una costante.
Se il tuo programma è più flessibile, esso può ottenere input dall'utente per dire cosa si
desidera leggere o scrivere.
Il secondo argomento dell'apertura f funzione è una stringa di caratteri che
rappresenta la modalità file.
Questo specifica cosa vuoi fare con il
file, se vuoi leggerlo, se vuoi scrivere se vuoi aggiungervi.
Una specifica della modalità file è una stringa di
caratteri tra virgolette doppie e mostrerò voi alcuni di quelli che
finiremo per usare molto.
Supponendo che la chiamata af aperta ha successo, restituirà quel
puntatore al file, tutto maiuscolo.
E poi puoi usare questo file puntatore per chiamare altre funzioni di input /
output nell'intestazione IO standard e li esamineremo quando passeremo attraverso la lettura
e la scrittura oppure puoi anche ottenere la posizione usando
quel puntatore per cambiare il file posizione in cui ti trovi nel file.
Se il file non può essere aperto per qualche motivo, f
open restituirà null.
Quindi cosa significa questo è davanti a te inizia a leggere o
scrivere, assicurati che il puntatore non lo sia uguale a null, un altro se check.
Ecco il file modalità che ho citato.
Le modalità file, ricorda, sono le secondo parametro alla chiamata aperta f.
Questo è ciò che specifica cosa tu vuoi fare con il file,
ed è tutto racchiuso tra virgolette doppie.
Quindi se fai una w, significa che vuoi per aprire il file di testo per la scrittura.
Se fai una a, significa che vuoi per aprire il file di testo da aggiungere, tutte le
scritture si trovano alla fine del file.
Se fai una r, si apre il file di testo per la lettura.
Se aggiungi un plus a uno qualsiasi di questi, fondamentalmente creerà il file
se non esiste.
Quindi, se apri un file w plus, lo aprirà per l'aggiornamento e troncerà il
file a zero se esiste o potrebbe creare un nuovo file
se non esiste.
Con gli altri, è andando a scrivere o leggere um e il
file deve esistere.
Lo stesso con un vantaggio, si aprirà per aggiungere, per un aggiornamento, alla fine
del file esistente o crea il file se non esiste.
E la r plus si aprirà il file di testo per
l'aggiornamento, non creerà il file lì perché sarà vuoto.
Quindi la lettura è solo per sia leggendo che scrivendo quando vedi
la r plus.
Un po 'diverso dall'altro vantaggi dove stanno effettivamente creando
il file, non esiste.
Modalità di scrittura.
Se vuoi scrivere a un file di testo esistente
con il nome myfile. txt, creeresti il puntatore del file, tutto maiuscolo.
Impostalo su null, inizializzalo il null.
E poi forse creeresti il tuo file come un
altro puntatore a carattere, myfile. txt o potresti passalo come primo parametro, e
poi dici solo f aperto.
F nome del file aperto e poi w all'interno virgolette doppie che apre il file in scrittura
e restituisce un puntatore al file.
Ecco perché hai il file p a sinistra del compito.
Quindi vuoi controllare per fare certo il file p non è uguale a null.
Perché se è nullo, se lo è impossibile aprire per
qualsiasi motivo, forse il nome del file era sbagliato o non esisteva, quindi non saresti in
grado di scriverci.
Quindi vuoi sempre fare il file f controllare e stampare
alcune informazioni se non si apre.
Questo codice aprirà il file e assocerà il
file con il nome myfile. txt con il file puntatori file fp.
La modalità w significa che possiamo solo scrivere al file, non è possibile leggere da esso.
Se un file con il nome my file quel testo non
esiste, la chiamata a f open ne creerà uno nuovo
file con questo nome, e questo è per f aperto con l'opzione w.
E così quando abbiamo visto nel precedente mode, w plus creerà il file se non esiste ma
esso inoltre tronca il file a zero.
Questo è il diverso con il w.
Il w creerà se esso non esiste, ma non
lo troncerà a zero.
Quindi questo è il modo standard per aprendo file, usando
quella w tra virgolette doppie.
Se fornisci solo il nome del file senza alcuna specifica di
percorso, quindi è quello che abbiamo fatto in questo ad esempio, un
percorso da ricordare è il nome delle directory.
Se non fornisci il nome del file directory, presumerà che quel file
si trovi nella directory corrente ovunque sia in esecuzione il programma.
Se vuoi effettivamente aprire su un file da qualche altra
parte in cui non si trova effettivamente la directory dei programmi, quindi
devi specificare l'intero percorso.
Questo è chiamato il percorso assoluto.
Quando non fornisci alcun percorso, di solito è il percorso relativo, è relativo a
dove è in esecuzione il programma.
Quindi puoi specificare uno dei due, il file percorso assoluto
o relativo, assicurati solo di sapere dove si trova e stai facendo quello giusto.
I percorsi relativi sono generalmente migliori perché allora non dipende.
Se qualcuno si fosse trasferito quel file non dipende
da dove è stato spostato.
E puoi effettivamente fare un file percorso relativo e puoi tornare alle directory, quindi
puoi fare un punto slash e questo è relativo a dove il programma è in
esecuzione sei solo tornare indietro di un paio di directory.
Quando usi un valore assoluto path, sarebbe effettivamente
qualcosa come il programma c due punti file se sei su Windows.
E se quel file è mai stato spostato, il file il programma non sarebbe in grado di aprirlo.
Quindi aprendo un file per la scrittura il collegamento al file
viene troncato a zero e la posizione sarà all'inizio di qualsiasi dato
esistente per la prima operazione.
Tutti i dati che erano in precedenza scritti nel file
verranno persi e sovrascritti da qualsiasi operazione di scrittura.
Quindi di nuovo senza provvedere il vantaggio su di esso, significa solo che
non puoi leggere e scrivere.
Questo è solo in scrittura.
W ha solo ragione.
W plus significa che puoi leggere e scrivere.
Modalità di aggiunta.
Se vuoi aggiungere a un file file di testo invece di sovrascriverlo è
possibile specificare la modalità a.
Questo dipende.
Questo posiziona il file alla fine di eventuali dati scritti in precedenza.
Se il file non esiste, ne crea uno nuovo.
L'esempio qui sei tu cambia il secondo parametro in una a tra
virgolette doppie, it aggiungerà alla fine di myfile. TXT.
E non dimenticare che tu dovrebbe sempre verificare il
valore restituito per null ogni volta.
Vuoi sempre fare il se p file non è uguale a null.
Quando apri un file in append modalità, tutte le operazioni di scrittura
saranno alla fine dei dati in formato il file in ogni operazione di scrittura.
Tutte le operazioni di scrittura vengono aggiunte dati nel file
e non è possibile aggiornare i contenuti esistenti in formato questa modalità, è tutto alla fine.
In modalità di lettura possiamo aprire il file per leggere un file.
Usiamo solo la r tra virgolette doppie.
Questo è di sola lettura, tu non è possibile scrivere sul file.
Se lo fai r plus lo faresti essere in grado di leggere e scrivere.
Quindi sembra che le altre chiamate, basta fare una f aperta, passare il
nome del file e poi r in doppia virgolette che restituisce un puntatore a file.
Posizioneremo anche il file all'inizio dei dati.
Se vuoi solo leggere il file, deve già esistere.
Non lo farai legge un file vuoto.
Quindi non c'è possibilità di creare il file non esiste,
sarà solo vuoto o torneresti indietro il file avversario sarebbe nullo.
Se provi ad aprire un file per leggendolo non
esiste, restituirà il puntatore nullo.
Se esiste ed è vuoto, semplicemente non restituirai dati.
Vuoi sempre controllare il file valore restituito da f aperto.
Ancora una volta, leggendolo per il seconda volta, è importante.
Perché se è un puntatore nullo, il tuo programma andrà in
crash, farà qualcosa di male.
Rinominare un file.
Ora sappiamo come aprire un file.
L'apertura di un file è la prima operazione, si specifica la
modalità e il nome del file.
Questo ti restituisce il file puntatore che ora puoi
usare per fare altre cose con.
Rinominare un file è a volte importante.
È molto facile.
Devi solo usare la funzione di rinomina.
Ci vuole un vecchio nome e uno nuovo name come puntatori a
caratteri costanti e restituisce un int.
Il numero intero restituito lo farà essere zero se la modifica del nome
ha avuto esito positivo e diverso da zero in caso contrario.
Il file non deve essere aperto quando chiami rename.
Altrimenti fallirà poiché è in uso non è possibile rinominare un
file quando è in uso.
Quindi quello che puoi fare qui è che puoi basta dire rinomina, passare il vecchio nome del file e
il nuovo nome del file.
In questo esempio, stiamo usando un percorso a un file in Windows.
E tu sai che è Windows perché vedo i due punti.
Noti anche che il file la barra rovesciata è presente due volte.
La ragione di ciò è perché il backslash è un carattere speciale in c.
La barra rovesciata n è un feedback di riga.
Barra rovesciata r è un ritorno a capo.
Quindi il backslash è speciale significato nel programma.
Quindi, se vuoi usare effettivamente il file barra rovesciata per un percorso in una directory,
che è ciò che fa Windows, tu devono fornire due di loro.
E così qui stiamo rinominando un miofile. txt che individua la directory
temporanea.
Lo rinominiamo nel mio file di sottolineatura copia. testo nella directory dei tentativi.
E se questo non è uguale a uno, fallirà.
Stampiamo solo un file output che dice che non è riuscito.
In caso contrario, la stampa è riuscita.
Questo cambierà il file nome di miofile. txt nella directory temporanea sulla mia copia del file.
Se il percorso del file non è corretto o il file non esiste,
non potrà essere rinominato.
Puoi anche chiudere un file e vuoi per farlo ogni volta che apri un file.
Quindi, quando hai finito con il file file stesso, vuoi
dire al sistema operativo di liberare quel file.
Ricorda, c'è un limite a quanti file puoi
avere aperti in un dato momento.
Puoi farlo chiamando la funzione di chiusura f.
F close accetta un file puntatore come argomento.
Ricorda, il puntatore del file rappresenta il file.
Restituisce un eof.
Eof è un int.
Restituisce eof se si verifica un errore.
Eof è un personaggio speciale chiamato carattere di fine file.
È definito in standardio. h come numero intero negativo.
Di solito è equivalente a quella negativa.
Se f close ha avuto successo, restituirà zero.
Quindi puoi controllare eof per infruttuoso.
Dici solo f close pass nel file pointer, puoi quindi impostare il puntatore su null
e il risultato della chiamata f close è che la connessione tra il
puntatore, il file p e il file fisico è danneggiato.
Il file P non può più essere utilizzato per accedere al
file da leggere, scrivere o aggiungere o rinominare.
Se si sta scrivendo il file, il contenuto corrente del buffer di output viene
scritto nel file assicurarsi che i dati non vadano persi.
Quindi non hai problemi con integrità dei dati, non chiuderai
effettivamente il file se lo fosse essere scritto in un altro thread.
Quindi è thread-safe.
Non abbiamo parlato di thread, questo è un concetto più avanzato.
Ma è dove puoi averne più punti di esecuzione nel programma.
È una buona pratica di programmazione per chiudere un file non appena
lo hai finito, proprio come è una buona pratica di
programmazione liberare memoria quando hai finito con esso, lo stesso per la chiusura dei file.
Protegge dalla perdita di dati in uscita.
È inoltre necessario chiudere un file prima di tentare
di rinominarlo o rimuoverlo, deve farlo essere chiuso non può essere aperto.
Che ne dici di eliminare un file.
Puoi eliminare un file con invocando la funzione di rimozione.
Anche questo è dichiarato in standardio. h.
Tutte le operazioni sui file sono dichiarato in standard. ioh.
Puoi sempre andare a vedere questo file di intestazione se vuoi
dove sono installati i file di intestazione c.
Quindi dici solo rimuovi nome del file.
Qui non devi usa il puntatore del file.
Puoi solo dire perché il file non deve
essere effettivamente aperto per rimuoverlo.
Lo stesso con il rinomina perché in realtà non vuoi che i file siano aperti perché il
file rinominare o la rimozione avrà esito negativo.
Cancellerà il file che ha il nome myfile. txt dalla directory
corrente.
Questo fornisce un percorso relativo.
Cercherà quel file ovunque sia in esecuzione il programma.
Altrimenti, devi fornire un percorso assoluto.
Il file non può essere aperto quando si prova a cancellarlo, proprio come rinomina.
Dovresti sempre ricontrollare con operazioni che eliminano i file.
Potresti distruggere il tuo sistema se non lo fai.
Un'eliminazione è molto costosa, operazione molto pericolosa.
L'eliminazione dei file può causare problemi.
Perciò stai attento.
Tutte le informazioni in questa conferenza aveva a che fare con l'accesso ai file,
come puoi aprire i file, quale è quello che devi fare prima
di leggere e scrivere, e anche come te può eliminare e rinominare i file e poi
chiudersi quando hai finito di usarli.
Tutto è basato da quel puntatore di file.
Quindi capisci quel puntatore di file e la struttura che contiene.
Roba piuttosto utile.
L'intestazione io standard contiene tutte le ottime informazioni.
Il prossimo paio di lezioni, andremo
per parlare di lettura e scrittura su file di testo, aggiungendo effettivamente dati o aggiungendoli o leggendoli.
Grazie. Spero che questo sia stato utile.