Hola y bienvenido de nuevo.
En esta conferencia, quiero hablar sobre el acceso a archivos.
Entonces, los archivos en el disco tienen un nombre y las reglas para nombrar los
archivos están determinadas por su sistema operativo.
Puede que tengas que ajustarte los nombres según el sistema operativo que
esté ejecutando su programa.
Si su programa se ejecuta en Windows frente a Linux, la estructura
de directorios real también es diferente.
Entonces, si usa barras diagonales o barras hacia atrás, debe
ajustar esto en su programa.
Pero en su mayor parte, el los nombres tienen relativamente las mismas
reglas de denominación y así sucesivamente.
Pero existe la posibilidad de que tendrías que ajustarlo.
Un programa hace referencia a un archivo a través de un puntero de archivo o un puntero de flujo.
Dado que funciona en más de un archivo,
de hecho, lo mencionamos antes, pero el estándar Las funciones io funcionan en cualquier dispositivo.
Por eso se llama puntero de archivo, pero en realidad debería denominarse
puntero de flujo.
Asocia un puntero de archivo con un archivo mediante programación cuando
se ejecuta su programa.
Entonces, lo que terminas haciendo es cree un puntero dentro
de su programa, será de tipo archivo y eso representará el archivo cuando lo
lea y escriba.
Usamos estos punteros de archivo como forma más eficaz de apuntar realmente a los archivos en lugar
de al nombre porque el nombre puede ser
un poco diferente.
El puntero representará a qué apunta en realidad.
Y puedes reutilizar los punteros para apuntar a diferentes archivos en
diferentes ocasiones, lo que, de nuevo, estaba representado por el nombre del archivo.
Un puntero de archivo apunta a una estructura tipo de archivo que representa una secuencia.
De hecho, puedes ir y mirar en la estructura del archivo para ver todo lo
que hay dentro de él.
Pero contiene información tal como si desea leer o escribir o
actualizar el archivo, el dirección del búfer en la memoria donde está almacenando
datos, una puntero a la posición actual en el archivo
para la siguiente operación.
Mencionamos que la posición es importante porque ahí
es donde estás escribiendo y leyendo.
Y puedes configurar toda esta información dentro de la estructura mediante el uso de
operaciones de archivo de entrada y salida.
Las operaciones del archivo de entrada y salida, cuando abres un archivo,
realmente especificará si quieres leer o escribir.
Y luego también puedes cambiar el posición actual mediante el uso de otros
métodos como buscar, etc. del que vamos a hablar.
Si desea utilizar varios archivos simultáneo en su programa, debe
crear un puntero de archivo para cada archivo.
Solo puedes reutilizar el archivo puntero si está leyendo y escribiendo
en diferentes momentos.
Hay un límite para el número de abiertos archivos que puede tener abiertos al mismo tiempo.
Puedes mirar el límite en el E / S estándar, hay
una constante definida f abierto máximo todo depende nuevamente del sistema operativo en el que
se esté ejecutando.
Pero normalmente no quieres crear y abra una tonelada de archivos a la vez.
Escribir y leer los archivos es una operación costosa porque está escribiendo en
el disco duro.
No es tan rápido como escribir la memoria,
por lo que lleva tiempo y puede hacer que su programa para ser menos receptivo.
No quieres tener 10 los archivos se abren y se
escriben en 10 archivos al mismo tiempo.
Para abrir un archivo, esto sería Sea el primer paso que
realice antes de leer y escribir.
Entonces desea asociar un nombre de archivo externo con
un puntero final completo a través de un proceso referido como abrir el archivo.
La forma en que abre un archivo y mira si llamas f función abierta.
Esto devolverá el archivo puntero que luego puede
usar para leer y escribir.
Y de nuevo, el puntero del archivo es va a apuntar a un
archivo externo específico que está en el disco.
F abierto va a tomar el nombre del archivo.
El f abierto es lo que tienes que hacer antes de leer / escribir.
Suele ser su primera operación.
Y como ocurre con la mayoría de estas funciones, todos están definidos en standardio. h.
Aquí está la definición de la convocatoria abierta.
Verás que el regreso value es un puntero de archivo,
todo en mayúsculas, la estructura del archivo.
Así que todo archivo en mayúsculas.
Entonces notará que se necesita un par de parámetros, se necesita un nombre
y un modo y no te preocupes por esto restringir eso es solo más cosas de C11.
Realmente solo se necesita el personaje puntero a un nombre y un modo.
El primer argumento de la función es un puntero a una
cadena que es el nombre del archivo, de modo que estará entre comillas dobles.
Puede especificar el nombre explícitamente o utilice un puntero de carácter que contenga la dirección de
la cadena de caracteres.
Entonces todo lo que esto dice es que podrías crear una cadena de caracteres y
asignarla al texto literal y luego pase la cadena a la
función o puede poner dentro del doble comillas justo dentro de la llamada a la función.
Puede obtener el nombre del archivo a través de la línea
de comando como entrada del usuario o definir como una constante su programa.
Si siempre es el mismo archivo estás leyendo escribiendo a
y el nombre no importa, tú puede referirse simplemente como una constante.
Si su programa es más flexible, puede obtener información del usuario para decir lo que
desea leer o escribir.
El segundo argumento para el f abierto La función es una cadena de caracteres que
representa el modo de archivo.
Esto especifica lo que quieres hacer con el
archivo, si desea leerlo, si desea escribir en si desea agregarlo.
Una especificación de modo de archivo es una cadena
de caracteres entre comillas dobles, y mostraré algunos de los que vamos
a terminar usando mucho.
Asumiendo la llamada af abierta tiene éxito, devolverá ese puntero
de archivo, todo en mayúsculas.
Y luego puedes usar este archivo puntero para llamar a otras funciones de entrada /
salida en el encabezado IO estándar, y vamos a repasar esos cuando pasemos
por la lectura y la escritura o también puede obtener la posición
usando ese puntero para cambiar el posición de dónde se encuentra en el archivo.
Si el archivo no se puede abrir por alguna razón, f
open devolverá nulo.
Entonces, lo que esto significa es ante ti comience a leer
o escribir, asegúrese de que el puntero no esté igual a nulo, otro si cheque.
Aquí está el archivo modos que mencioné.
Los modos de archivo, recuerde, son los segundo parámetro a la f llamada abierta.
Esto es lo que especifica lo que quiere hacer con el archivo,
y todo está entre comillas dobles.
Entonces, si haces una w, eso significa que quieres para abrir el archivo de texto para escribir.
Si haces una a, eso significa que quieres para abrir el archivo de texto y agregarlo, todas
las escrituras están al final del archivo.
Si haces una r, se abre el archivo de texto para leer.
Si agrega un plus a cualquiera de estos, básicamente creará el archivo
si no existe.
Entonces, si abre un archivo w plus, lo abrirá para actualizarlo y truncará el
archivo a cero si existe o podría crear un nuevo archivo
si no existe.
Con los otros, es va a escribir o leer um y el
archivo tiene que existir.
Lo mismo con un plus, se abrirá para agregar, para una actualización, al final
del archivo existente o cree el archivo si no existe.
Y el r plus se abrirá el archivo de texto para actualizar,
no va a crear el archivo allí porque estará vacío.
Entonces la lectura es solo para tanto leyendo como escribiendo cuando veas
la r plus.
Un poco diferente al otro ventajas donde realmente están creando
el archivo, no existe.
Modo de escritura.
Si quieres escribir a un archivo de texto existente
con el nombre myfile. txt, crearías su puntero de archivo, todo en mayúsculas.
Póngalo en nulo, inicialícelo el nulo.
Y entonces tal vez crearías su archivo como
otro puntero de carácter, myfile. txt o podrías pase eso como el primer parámetro,
y luego simplemente diga f abierto.
F abre el nombre del archivo y luego w dentro comillas dobles que abren el archivo para
escribir y devuelve un puntero de archivo.
Por eso tienes el archivo p en la izquierda de la tarea.
Entonces desea verificar para hacer seguro que el archivo p no es igual a nulo.
Porque si es nulo, si no se pudo abrir por
alguna razón, tal vez el nombre del archivo era incorrecto o no existiera, entonces no podrías
escribir en él.
Entonces siempre quieres hacer el f verifique e imprima alguna
información si no se abre.
Este código abrirá el archivo. y asociará el
archivo con el nombre myfile. txt con su archivo de punteros de archivo fp.
El modo w significa que solo podemos escribir al archivo, no puede leerlo.
Si un archivo con el nombre mi archivo ese texto no
existe, la llamada a f open creará un nuevo archivo
con este nombre, y eso es para f abrir con la opción w.
Y así, cuando vimos en la anterior modos, w plus creará el archivo si no existe
pero también trunca el archivo a cero.
Eso es lo diferente con la w.
La w creará si no existe, pero no
lo truncará a cero.
Así que esta es la forma estándar de abriendo archivos, usando
esa w dentro de las comillas dobles.
Si solo proporciona el nombre del archivo sin ninguna especificación de ruta,
así que eso es lo que hicimos en este Por ejemplo, una
ruta recuerda es el nombre de los directorios.
Si no proporciona el nombre del directorios, asumirá que ese archivo está en
el directorio actual donde sea que se esté ejecutando el programa.
Si realmente quieres abrir subir un archivo en otro lugar
donde no se encuentra realmente en el directorio de programas, luego debe
especificar la ruta completa.
Eso se llama el camino absoluto.
Cuando no proporcionas un camino, generalmente la ruta relativa, es relativa a
donde se ejecuta el programa.
Entonces puede especificar cualquiera, el ruta absoluta o relativa,
solo asegúrese de saber dónde se encuentra y estás haciendo el correcto.
Las rutas relativas suelen ser mejores porque entonces no es dependiente.
Si alguien se hubiera movido ese archivo no depende
de dónde se movió.
Y realmente puedes hacer un ruta relativa, y puede volver a los directorios,
por lo que puede hacer un punto barra y eso es relativo a donde
se ejecuta el programa, solo retrocediendo un par de directorios.
Cuando usas un absoluto ruta, en realidad sería
algo así como el programa c colon archivos si está en Windows.
Y si ese archivo alguna vez se movió, el programa no podría abrirlo.
Entonces, al abrir un archivo para escribir el enlace del archivo
se trunca a cero y la posición será al comienzo de cualquier dato
existente para la primera operación.
Cualquier dato que haya sido previamente escrito en el archivo se
perderá y se sobrescribirá con cualquier operación de escritura.
Así que de nuevo sin proporcionar la ventaja es que no
puede leer ni escribir.
Esto es solo de escritura.
W solo tiene razón.
W plus significa que puede leer y escribir.
Modo anexar.
Si desea agregar a un existente archivo de texto en lugar de sobrescribirlo,
puede especificar el modo a.
Esto depende.
Esto coloca el archivo al final de cualquier dato escrito previamente.
Si el archivo no existe, crea uno nuevo.
El ejemplo aquí es usted solo cambie el segundo parámetro para que sea una
comillas dobles internas, se agregará al final de myfile. TXT.
Y no olvides que tu siempre debe probar el valor
de retorno para nulo cada vez.
Siempre quieres hacer el si El archivo p no es igual a nulo.
Cuando abre un archivo en anexo modo, todas las operaciones de escritura
estarán al final de los datos en el archivo en cada operación de escritura.
Todas las operaciones de escritura se añaden datos al
archivo, y no puede actualizar el contenido existente en este modo, está todo al final.
En modo lectura podemos abrir subir el archivo para leer un archivo.
Solo usamos la r entre comillas dobles.
Esto es de solo lectura, tu no se puede escribir en el archivo.
Si haces r plus lo harías saber leer y escribir.
Entonces parece que las otras llamadas simplemente haz una f abierta, pasa el
nombre del archivo y luego r en doble comillas que devuelve un puntero de archivo.
También posicionaremos el archivo al comienzo de los datos.
Si vas a leer el archivo, ya debe existir.
No vas a leer un archivo vacío.
Entonces no hay opción de crear el archivo no
existe, simplemente estará vacío o volverás el archivo oponente sería nulo.
Si intenta abrir un archivo para al leerlo no
existe, devolverá el puntero nulo.
Si existe y está vacío simplemente no devolverá ningún dato.
Siempre quieres comprobar el valor de retorno de f abierto.
Nuevamente, leyendo eso para el segunda vez, es importante.
Porque si es un puntero nulo, su programa va a fallar,
va a hacer algo malo.
Cambiar el nombre de un archivo.
Ahora sabemos cómo abrir un archivo.
Abrir un archivo es la primera operación, usted especifica el
modo y el nombre del archivo.
Que te devuelve el archivo puntero que ahora puede
usar para hacer otras cosas.
Cambiar el nombre de un archivo es a veces importante.
Es muy fácil.
Solo usa la función de cambio de nombre.
Se necesita un nombre antiguo y uno nuevo name como punteros de
carácter constante y devuelve un int.
El entero que se devuelve será cero si el cambio de nombre
se realizó correctamente y distinto de cero en caso contrario.
El archivo no debe estar abierto cuando llamas a renombrar.
De lo contrario, va a fallar debido a que está en uso, no puede cambiar el
nombre de un archivo cuando está en uso.
Entonces, lo que puedes hacer aquí es solo diga renombrar, pase el nombre del archivo antiguo y el
nombre del nuevo archivo.
En este ejemplo, estamos usando una ruta a un archivo en Windows.
Y que sabes que es Windows porque veo dos puntos.
También nota que el barra invertida está ahí dos veces.
La razón de esto es porque el barra invertida es un carácter especial en c.
La barra invertida n es una retroalimentación de línea.
La barra invertida r es un retorno de carro.
Entonces la barra invertida tiene especial significado en el programa.
Entonces, si realmente quieres usar el barra invertida para una ruta en un directorio, que
es lo que hace Windows, tengo que proporcionar dos de ellos.
Y aquí estamos cambiando el nombre un myfile. txt localizando el directorio
temporal.
Le cambiamos el nombre a mi archivo de subrayado Copiar. texto en el directorio de intentos.
Y si eso no es igual a uno, fallará.
Solo imprimimos un salida que dice que falló.
De lo contrario, su impresión se realizó correctamente.
Esto va a cambiar el nombre de myfile. txt en el directorio temporal a mi copia de archivo.
Si la ruta del archivo es incorrecta o el archivo no existe, no
se podrá cambiar el nombre.
También puede cerrar un archivo y desea para hacer esto cada vez que abra un archivo.
Entonces, cuando hayas terminado con el archivo en sí, desea
decirle al sistema operativo que libere ese archivo.
Recuerda, hay un limite a cuántos archivos puede
tener abiertos en un momento dado.
Puedes hacer esto llamando la función f close.
F close acepta un archivo puntero como argumento.
Recuerde, el puntero de archivo representa el archivo.
Devuelve un eof.
Eof es un int.
Devuelve eof si ocurre un error.
Eof es un personaje especial llamado carácter de fin de archivo.
Está definido en standardio. h como un número entero negativo.
Suele ser equivalente a uno negativo.
Si el cierre fue exitoso, devolverá cero.
Para que puedas comprobar eof por infructuoso.
Solo dices que pase cerca en el puntero, puede establecer el puntero en nulo y
el resultado de llamar f cerrar es que la conexión entre el puntero,
el archivo p y el archivo físico está roto.
El archivo P ya no se puede utilizar para acceder al
archivo para leerlo, escribirlo, agregarlo o cambiarle el nombre.
Si se está escribiendo en el archivo, el contenido actual del búfer de salida se escribe
en el archivo para asegúrese de que los datos no se pierdan.
Entonces no tienes ningún problema con integridad de los datos,
no cerrará realmente el archivo si siendo escrito en otro hilo.
Por lo que es seguro para subprocesos.
No hemos hablado de hilos ese es un concepto más avanzado.
Pero es donde puedes tener múltiples puntos de ejecución en su programa.
Es una buena práctica de programación para cerrar un archivo tan pronto
como haya terminado con él, al igual que es una buena
práctica de programación liberar memoria cuando haya terminado con él, lo mismo para cerrar archivos.
Protege contra la pérdida de datos de salida.
También debes cerrar un archivo antes de intentar
cambiarle el nombre o eliminarlo, debe estar cerrado no se puede abrir.
¿Qué tal borrar un archivo?
Puede eliminar un archivo invocando la función de eliminación.
Esto también se declara en standardio. h.
Todas las operaciones de archivo son declarado en estándar. ioh.
Siempre puedes ir a mirar esto archivo de encabezado si lo desea
donde estén instalados los archivos de encabezado c.
Así que solo dices eliminar nombre del archivo.
Aquí no tienes que hacerlo utilice el puntero de archivo.
Solo puedes decir porque el archivo no tiene
que estar realmente abierto para eliminarlo.
Lo mismo con el cambio de nombre porque en realidad no desea que los archivos estén abiertos
porque el cambiar el nombre o la eliminación fallará.
Va a borrar el archivo que tiene el nombre myfile. txt del directorio
actual.
Esto proporciona un camino relativo.
Va a buscar ese archivo donde sea que se esté ejecutando el programa.
De lo contrario, necesita proporcionar un camino absoluto.
El archivo no se puede abrir cuando intente eliminarlo, al igual que cambiar el nombre.
Siempre debes verificar dos veces con operaciones que eliminan archivos.
Podrías arruinar tu sistema si no lo hace.
Una eliminación es muy cara, operación muy peligrosa.
Eliminar archivos puede causar problemas.
Así que ten cuidado.
Toda la información de esta conferencia tenía que ver con acceder a archivos, cómo
se pueden abrir archivos, qué es lo que debe hacer antes de
leer y escribir, y también cómo puede eliminar y cambiar el nombre de los archivos y luego
cerrarlos cuando haya terminado de usarlos.
Todo se basa fuera de ese puntero de archivo.
Entonces entiende ese puntero de archivo y la estructura que contiene.
Cosas bastante útiles.
El encabezado estándar de io contiene toda la gran información.
Próximo par de conferencias, vamos
para hablar sobre la lectura y escritura de archivos de texto, agregando datos o agregarlos o leerlos.
Gracias. Espero que esto haya sido útil.