Ciao e bentornato.
In questa conferenza, voglio parlare sul posizionamento dei file, fondamentalmente alcune funzioni
che ti permetteranno per modificare la posizione di un file.
Quindi, per molte applicazioni, stai andando essere in grado di accedere ai dati
in un file diverso dall'ordine sequenziale.
L'ordine sequenziale sta iniziando all'inizio e poi andando
byte per byte verso la fine.
Non è sempre utile perché potresti voler effettivamente entrare nel mezzo di
un file e prendere i dati o in la fine del file e prendi i dati.
Tutto dipende dall'applicazione.
Non vuoi sempre andare dall'inizio alla fine.
Quindi ci sono varie funzioni che puoi utilizzare per accedere
ai dati in sequenza casuale.
Ci sono due aspetti di posizionamento dei file.
Uno è scoprire dove sei sono in un file e l'altro si sta spostando in
un determinato punto in un file.
Queste sono davvero le due cose che tu vuoi scoprire quando
parli di file e il posizionamento di un file file, a cosa sta effettivamente puntando.
Di nuovo, dove ti trovi nel file stesso e se vuoi o meno spostarti da
qualche altra parte nel file.
Quindi puoi accedere al file in una posizione casuale indipendentemente dal fatto che si
apra il file, puoi spostare il tuo file partner.
Non è necessario aprire il file file per cambiare dove sei
per cambiare vedere dove sei.
Quindi scopri dove sei ne parleremo prima.
Hai due funzioni da trovare dove ti trovi in un file uno.
Si chiama ftel e uno è chiamato fgetpos, posizione fget.
Per ftell, la funzione effettiva la definizione è piuttosto semplice.
Torni insieme e prendi un puntatore di file.
E questa funzione accetterà un puntatore a file come argomento
e restituirà il numero intero lungo valore che specifica la posizione del carattere
nel file, quindi è ti dirò la posizione.
Puoi usarlo creando un file variabile in questo caso fpos, che sta per ottenere
restituito e quindi passando il puntatore
del file e chiamando ftel.
La variabile di posizione f ora vale la posizione corrente nel
file e puoi usarla per tornare al file posizione in qualsiasi momento successivo.
Quindi ti restituirà la posizione.
Questo è il modo in cui puoi ottenere la posizione del punto
corrente a cui stai puntando.
Il valore è l'offset in byte dall'inizio del file.
Quindi mi sento molto semplice usa il passaggio nel tuo puntatore,
tornerà e ti dirà dove sei sono nel tuo file in base fondamentalmente
dall'inizio del file fino a quanti byte dall'inizio.
Quindi in questo esempio, stiamo creando un puntatore a file chiamato fp e stiamo
creando un intero chiamato length.
Stiamo per aprire il file, e questo sarebbe solo per la lettura.
Stiamo andando a fare certo non è nullo.
Se lo è, stiamo andando per restituire un errore.
E poi non preoccuparti per il fseek.
Il fseek in realtà sta solo andando per andare alla fine del file.
Questa è un'altra funzione che ci aiuta.
Lo sto usando solo per dimostrare l'ftel.
Fseek andrà fino alla fine del file, e
poi dirai ftell fp, e questo va per dirti che in pratica sarai alla
fine del file.
Quindi il collegamento che viene restituito è alla fine del file.
E quindi quello che succederà è restituirà la dimensione
totale del file in base alla lunghezza perché hai effettivamente spostato il puntatore alla fine e
poi tu ha detto dove sono e ha detto che sei alla fine,
quindi torna alla fine.
E la fine è il numero di byte dall'ultima lettura.
Quindi diamo un'occhiata a questo all'interno del nostro simpatico IDE i nostri blocchi di codice.
Quindi ecco il nostro esempio di codifica dove creiamo il nostro puntatore al file.
Lo impostiamo su null, make certo non è nullo.
Cerchiamo di aprirlo.
E poi facciamo un fseek che è giusto cambierà il nostro puntatore di file.
Ce lo dirà Ftel dove stiamo puntando.
Quindi punterà al file end e sarà un numero qualsiasi
di byte fino alla fine.
Quando eseguiamo questo, cosa stai andando da notare è che visualizza 24 byte.
Quindi significa che sei alla fine del file file perché il file è un file di piccole dimensioni
e il file contiene solo 24 byte.
In genere, utilizzerai ftel dopo hai scritto o letto un po 'o dopo
averlo fatto fseek dove ti sei trasferito da qualche parte.
Ma è molto semplice chiamare ftel con il puntatore del file e poi
len ti dice semplicemente dove ti trovi.
Puoi anche usare fget posizione o funzione fgetpos.
E questa è una seconda funzione fornendo informazioni sulla posizione
del file corrente.
È un po 'di più complicato di ftel.
Ciò restituisce un numero intero.
Ci vuole un puntatore di file e lo accetta anche il tipo f posizione t.
Quindi il primo parametro è quel puntatore di file, in modo da
sapere in quale file devi leggere.
Il secondo parametro è un puntatore a un file tipo definito in standardio. h.
Il tipo di posizione f è in grado di farlo registra ogni posizione all'interno di un file.
Quindi la funzione di posizione fget è progettato per essere utilizzato
quando la funzione di posizionamento è impostata sulla posizione.
Quindi usi la posizione fset e quindi usi la posizione fget in
combinazione con quella.
Quindi la funzione di posizione fget memorizza la posizione corrente e
le informazioni sullo stato del file per il file e
posizione e restituisce zero se l'operazione ha successo, restituisce a valore intero diverso da zero per errore.
Quindi puoi creare un file variabile di tipo posizione s.
E qui diciamo che è proprio qui.
Quindi chiamiamo posizione fget.
Specifichiamo nel nostro puntatore al file e specifichiamo nel nostro tipo di posizione f.
Dobbiamo passare nella e commerciale, il indirizzo di perché non è un puntatore.
Quindi, in questo caso, la corrente la posizione del file è nella
variabile ciao o qui.
Quindi devi dichiarare una variabile di tipo f posizione t perché è
quello che passi nel tuo file parametro, il tuo secondo parametro.
Puoi dichiarare un puntatore del file digitare f posizione t stella perché
non ci saranno ricordi associato per memorizzare i dati di posizione.
Quindi diamo un'occhiata a un esempio questo avrà molto più senso.
In questo caso, creiamo il nostro file pointer, creiamo la nostra posizione
f possesso t tipo, chiamiamo open e quindi chiamiamo posizione fget.
E passiamo nel nostro file puntatore nella nostra posizione finale.
Quindi è lì che siamo memorizzare la posizione.
Otterremo il file posizione in cui ci troviamo.
Quindi quando diciamo f, metti s, stiamo scrivendo alcuni dati
ovunque ci spostiamo.
Quindi di nuovo, f prendi posizione e ftell ti dice dove vuoi effettivamente scrivere
o leggere.
È da qualche parte nel mezzo.
Non è all'inizio non è alla fine.
Ti stai muovendo.
Di solito ti muovi con una ricerca o la tua mossa con qualcos'altro,
prendi posizione e quello ti dice dove ti trovi.
Quindi fget position and ftell is ti dirò esattamente dove stai indicando, e quello
significa che puoi spostarti da qualche altra parte e sarai in
grado di leggere.
Ora impostando una posizione in a file fino a questo punto, stiamo
solo leggendo dove siamo.
Non leggeremo davvero in dove siamo a meno che
non impostiamo qualcosa, abbiamo letto e scritto.
Quindi, come complemento a ftell, hai anche fseek.
E fseek te lo permetterà spostati da qualche parte per la tua posizione.
Restituisce un int.
Restituisce un puntatore a file, un long fset e un numero intero originale.
Il primo parametro è un puntatore al file che stai riposizionando.
Il secondo e il terzo parametro definiscono dove vuoi andare nel file.
Il secondo parametro è un file offset dove un punto
di riferimento specificato dal terzo parametro.
Il punto di riferimento può essere uno di tre
valori specificati dai nomi predefiniti.
Cerca set, cerca corrente e cerca fine.
Seek set definisce il inizio del file.
Seek cur definisce la corrente position nel file e seek end
definisce la fine del file.
Quindi, per un file in modalità testo, il secondo argomento deve essere un
valore restituito da ftel.
Quindi dovresti notarlo con fseek e ftel, vengono utilizzati insieme.
Quindi il terzo argomento per il testo i file di modalità devono essere impostati per la ricerca.
Per i file di testo, tutte le operazioni con fseek vengono eseguiti con
riferimento all'inizio del file file per file binari di cui non
abbiamo imparato molto.
Ma per i file binari, il L'argomento offset è semplicemente un
conteggio di byte relativo.
Puoi, quindi, fornire valori positivi o negativi per
l'offset quando il riferimento point è specificato come seek cur.
Quindi diamo un'occhiata a un esempio.
Qui in questo esempio, ancora una volta, eseguiamo gli fput.
Quindi scriviamo alcuni dati al nostro file, e quindi usiamo fseek.
Fseek ti commuoverà.
Ecco questo sta dicendo che stai andando a spostare sette byte e
usiamo seek set per dire che vogliamo per spostarsi da qualche parte
fondamentalmente sette byte dall'inizio.
E possiamo passare da l'inizio del file di
sette byte che lo sposterà.
Dopo sette byte, possiamo quindi effettivamente scrivere dati su di esso.
E saremmo anche in grado di farlo usa ftell per vedere che oh dopo
sette byte dove siamo.
Puoi usare le informazioni per riprenditi da dove sei.
Di nuovo, l'intero punto del fseek e il problema è che stai vedendo
dove ti trovi per specificare dove vuoi scrivere o leggere.
Quindi fseek s effettivamente lo farà sposta la posizione, tell ti
dirà dove ti trovi.
Anche la posizione Fset è come fseek.
Ma la posizione fset è a un po 'più complicato.
Andrà con la posizione fset.
Quindi fset get get position is also molto simile alla posizione fset.
Con la posizione fset, esso specifica il primo parametro come
puntatore al file aperto.
Il secondo parametro è a puntatore di tipo f posizione t.
La posizione memorizzata all'indirizzo è stato
ottenuto contenendo fget position.
Quindi la posizione di fset ha il tuo file puntatore e quindi la variabile effettiva.
E la variabile qui era in precedenza impostato da una chiamata alla posizione fget.
Ancora una volta, userai fset e fget insieme.
La posizione fset restituisce a valore diverso da zero in caso di errore o zero in
caso di esito positivo.
Questa funzione è progettata per lavorare con un
valore restituito da fget position.
Quindi puoi usarlo solo per arrivare a un file numero in un file per ottenere un posto nel file
che sei stato prima.
Fseek ti consente di andare a qualsiasi file posizione semplicemente specificando
l'offset appropriato.
Quindi qui sembra che abbiamo la nostra posizione f posizione tipo t.
Apriamo il nostro file e quindi chiamiamo posizione fget.
Nella posizione fget, stiamo specificando dove vogliamo spostare
il puntatore, dove siamo effettivamente leggere o scrivere nel file.
Quindi usiamo fput per ovunque ci siamo spostati.
E poi la posizione finale sta per di nuovo imposta qualcosa di specifico
dove vogliamo scrivere e poi scrivilo da dove vogliamo.
Quindi con tutte queste funzioni, vuoi vedere effettivamente dove stai
indicando.
Questo diventerà molto più facile capire una volta che abbiamo la nostra sfida.
Quindi con la lettura e la scrittura, tu vuoi sempre spostarti da qualche parte al punto
in cui stai scrivendo.
Non sempre vuoi scrivere per l'inizio o la fine.
E quindi queste funzioni sono molto utile per spostarti dove vuoi
posizionarti ovunque in un file.
Grazie