Hola y bienvenido de nuevo.
En esta conferencia, quiero hablar sobre el posicionamiento de archivos, básicamente algunas
funciones que te permitirán para cambiar la posición de un archivo.
Entonces, para muchas aplicaciones, vas a necesitar poder acceder a los datos en un
archivo que no sea el orden secuencial.
El orden secuencial está comenzando al principio y luego,
byte a byte, hacia el final.
Eso no siempre es útil porque es posible que desee ir a la
mitad de un archivo y obtener datos o en el final del archivo y tomar los datos.
Todo depende de la aplicación.
No siempre quieres ir Desde el principio hasta el final.
Entonces hay varias funciones que puede utilizar para acceder a
los datos en secuencia aleatoria.
Hay dos aspectos de posicionamiento de archivos.
Uno es averiguar dónde estás están en un archivo y el otro se mueve a
un punto dado en un archivo.
Esas son realmente las dos cosas que quiere saber cuándo
se trata de archivos y el posicionamiento de un archivo, a qué apunta en realidad.
De nuevo, ¿dónde se encuentra en el archivo? sí mismo y si desea o no
mover a otra parte del archivo.
Para que pueda acceder al archivo en una posición aleatoria independientemente de si
abre el archivo, puede mover su socio de archivos.
No es necesario abrir el archivo para cambiar dónde se encuentra para
cambiar ver dónde se encuentra.
Así que averigua dónde estás vamos a hablar primero.
Tienes dos funciones para encontrar saber dónde se encuentra en un archivo uno.
Se llama ftel y uno es llamado fgetpos, fget position.
Para ftell, la función real La definición es bastante sencilla.
Regresas y se toma un puntero de archivo.
Y esta función va a aceptar un puntero de archivo como argumento
y devolverá el entero largo valor que especifica la posición del carácter en el archivo,
por lo que es te voy a decir el puesto.
Puede usarlo creando un variable en este caso fpos, que va a lo que va a
obtener devuelto y luego pasando ese puntero de
archivo y llamando a ftel.
La variable de posición f ahora se mantiene la posición actual en
el archivo y puede usarlo para volver al posición en cualquier momento posterior.
Así que te devolverá la posición.
Esta es la forma en que puedes conseguir la posición del punto
actual al que está apuntando.
El valor es el desplazamiento en bytes. desde el principio del archivo.
Así que es muy sencillo use pass en su puntero, volverá
y le dirá dónde está están en su archivo básicamente desde el principio
del archivo hasta cuántos bytes desde el principio.
Entonces, en este ejemplo, estamos creando un puntero de archivo llamado fp y estamos creando
un número entero llamado length.
Vamos a abrir el archivo y esto sería solo para lectura.
Vamos a hacer seguro que no es nulo.
Si es así, vamos para devolver un error.
Y luego no te preocupes por la fseek.
La fseek en realidad solo va para ir al final del archivo.
Esta es otra función que nos ayuda.
Solo lo estoy usando para demuestre el ftel.
Fseek se va a ir hasta el final del archivo,
y luego va a decir ftell fp, y eso va para decirte que básicamente estarás al
final del archivo.
Entonces el enlace que se devolvió está al final del archivo.
Y entonces lo que va a pasar es devolverá el
tamaño total del archivo en función de la longitud porque en realidad moviste el puntero hasta
el final y luego Dijo dónde estoy y dijo que estás al final,
así que regresa al final.
Y el final es el número de bytes desde la última vez que lo leíste.
Así que echemos un vistazo a esto por dentro de nuestro bonito IDE nuestros bloques de código.
Así que aquí está nuestro ejemplo de codificación donde creamos nuestro puntero de archivo.
Lo ponemos en nulo, hacemos seguro que no es nulo.
Intentamos abrirlo.
Y luego hacemos una búsqueda que es solo vamos a cambiar nuestro puntero de archivo.
Ftel nos va a decir donde estamos apuntando.
Así que apuntará al end y será cualquier número de
bytes hasta el final.
Cuando ejecutamos esto, ¿qué vas a hacer? notar es que muestra 24 bytes.
Eso significa que estás al final del archivo porque el archivo es un archivo pequeño y
el archivo sólo contiene 24 bytes.
Normalmente, usará ftel después ha escrito o leído algo o después de
haberlo hecho en fbusque dónde se mudó a algún lugar.
Pero es muy sencillo llamar a ftel con el puntero del archivo y
luego len solo le dice dónde se encuentra.
También puede utilizar el fget posición o función fgetpos.
Y esta es una segunda función proporcionando información sobre la posición
actual del archivo.
Es un poco mas complicado que ftel.
Esto devuelve un número entero.
Toma un puntero de archivo y también toma la posición f tipo t.
Entonces el primer parámetro es ese puntero de archivo, para que
sepa en qué archivo necesita leer.
El segundo parámetro es un puntero a un tipo que se define en standardio. h.
La posición f tipo t es capaz de registrar cada posición dentro de un archivo.
Entonces la función de posición de fget es diseñado para ser
utilizado cuando la función de posicionamiento establece la posición.
Entonces usas fset position y luego usa fget position en
combinación con eso.
Entonces la función de posición de fget almacena la posición actual y
la información del estado del archivo para el archivo y posiciona
y devuelve cero si la operación es exitosa, devuelve un valor entero distinto de cero para el error.
Entonces puedes crear un variable del tipo de posición s.
Y aquí decimos que es solo aquí.
Entonces llamamos a fget position.
Especificamos en nuestro puntero de archivo, y especificamos en nuestro tipo de posición f.
Tenemos que pasar en el ampersand, el dirección de porque no es un puntero.
Entonces, en este caso, la corriente la posición del archivo está en
la variable hola o aquí.
Entonces tienes que declarar una variable de tipo f posición t porque
eso es lo que pasa en su parámetro, su segundo parámetro.
Puede declarar un puntero del tipo f posición t estrella porque no
habrá ningún recuerdo asociado para almacenar los datos de posición.
Así que veamos un ejemplo. esto tendrá mucho más sentido.
En este caso, creamos nuestro archivo puntero, creamos nuestra posición de tipo t
de posesión f, llamamos abierta y luego llamamos a fget position.
Y pasamos en nuestro archivo puntero en nuestra posición final.
Entonces ahí es donde estamos almacenar la posición.
Vamos a conseguir el posición en la que estamos.
Entonces, cuando decimos f put s, estamos escribiendo algunos datos en cualquier
lugar al que nos traslademos.
Así que de nuevo, obtengo la posición y ftell te dice dónde quieres escribir o
leer realmente.
Está en algún lugar en el medio.
No es al principio no es al final.
Te estás moviendo.
Por lo general, te moverás con una búsqueda. o tu movimiento con otra cosa,
ponte en posición y eso te dice dónde estás.
Entonces fget position y ftell es te dirá exactamente a dónde estás
apuntando, y que significa que puede mudarse a otro lugar
y podrá leer.
Ahora estableciendo una posición en un archivar hasta este punto, solo estamos
leyendo en dónde estamos.
Realmente no vamos a leer en donde estamos a menos
que establezcamos algo, hicimos una lectura y escritura.
Entonces, como complemento a ftell, también tienes fseek.
Y fseek te permitirá muévete a algún lugar para tu posición.
Devuelve un int.
Devuelve un puntero de archivo, un largo fset y un original entero.
El primer parámetro es un puntero al archivo que está reposicionando.
El segundo y tercer parámetro definen donde quiere ir en el archivo.
El segundo parámetro es un offset donde un punto de
referencia especificado por el tercer parámetro.
El punto de referencia puede ser uno de tres valores
especificados por los nombres predefinidos.
Busca el conjunto, busca la corriente y busca el fin.
El conjunto de búsqueda define el comienzo del archivo.
Seek cur define la corriente posición en el archivo y fin de búsqueda
define el final del archivo.
Entonces, para un archivo en modo texto, el segundo argumento debe ser un
valor devuelto por ftel.
Entonces deberías notar que con fseek y ftel, se usan juntos.
Entonces, el tercer argumento para el texto Los archivos de modo deben establecerse en busca.
Para archivos de texto, todas las operaciones con fseek se realizan con referencia al
comienzo de la file para archivos binarios sobre los que no
hemos aprendido mucho.
Pero para archivos binarios, el El argumento de compensación es simplemente
un recuento relativo de bytes.
Por lo tanto, puede suministrar valores positivos o negativos para
el desplazamiento cuando la referencia el punto se especifica como seek cur.
Así que veamos un ejemplo.
Aquí en este ejemplo, de nuevo, hacemos los fputs.
Entonces escribimos algunos datos en nuestro file, y luego usamos fseek.
Fseek te va a emocionar.
Aquí esto está diciendo que estás vamos a mover siete bytes y usamos
el conjunto de búsqueda para decir que queremos moverse en algún lugar básicamente
siete bytes desde el principio.
Y podemos movernos del principio del archivo en
siete bytes que lo moverán.
Después de siete bytes, podemos escribir datos en él.
Y también podríamos use ftell para ver que oh después de siete
bytes donde estamos.
Puede utilizar la información para recupera de donde estás.
Una vez más, todo el punto de la fseek y el resultado es que
está viendo dónde se encuentra para especificar donde desea escribir o leer.
Así que fseek s realmente va a mueve la posición, tell te
dirá dónde te encuentras.
La posición de Fset también es como fseek.
Pero la posicin fija es una un poco más complicado.
Irá con la posición fset.
Así que fset get get position también es muy similar a la posición de fset.
Con la posicin fset, especifica el primer parámetro como un
puntero al archivo abierto.
El segundo parámetro es un puntero del tipo t de la posición f.
La posición que se almacena en la dirección
se obtuvo al contener fget position.
Entonces, la posición de fset tiene tu archivo puntero y luego su variable real.
Y la variable aquí fue previamente establecido por una llamada a la posición fget.
De nuevo, vas a usar fset y fget juntos.
La posición fset devuelve un valor distinto de cero en caso de error o
cero cuando tiene éxito.
Esta función está diseñada para trabajar con un
valor devuelto por fget position.
Así que solo puedes usarlo para llegar a un número en un archivo para obtener un lugar en el
archivo que ha estado antes.
Fseek le permite ir a cualquier posición simplemente especificando el
desplazamiento apropiado.
Así que aquí parece que tenemos nuestra posición f posición tipo t.
Abrimos nuestro archivo y luego llamamos a fget position.
En la posición de fget, estamos especificando donde queremos mover
el puntero, donde estamos en realidad leer o escribir en el archivo.
Luego usamos fputs para donde sea que lo movamos.
Y luego la posición inicial va a de nuevo establezca algo específicamente
donde queremos escribir y luego escribirlo desde donde queramos.
Entonces, con todas estas funciones, quieres ver realmente a dónde estás
apuntando.
Esto será mucho más fácil de entenderemos una vez que tengamos nuestro desafío.
Entonces, con la lectura y la escritura, siempre quieres ir a algún lugar hasta el punto en
el que estás escribiendo.
No siempre quieres escribir para el principio o el final.
Y estas funciones son muy útil para mover donde desee colocar en
cualquier lugar de un archivo.
Gracias