Red de conocimiento informático - Computadora portátil - c ¿Cómo vinculo un archivo a un programa?

c ¿Cómo vinculo un archivo a un programa?

I Relación del archivo de encabezado:

C La clase ifstream y la clase ofstream se definen en el archivo de encabezado fstream(fstream.h), así como fstream para la sincronización de E/S. La clase de flujo de archivos hereda un miembro de estado de flujo y métodos para informar el estado de flujo de la clase ios_base. Para la mayoría de las implementaciones, incluir fstream incluye automáticamente el archivo iostream.

Dos formas de crear objetos de flujo de lectura/escritura:

1) Constructor

1. ifstream fin.open("jar.dat" ); o ifstram fin("jar.dat ");

El método de ofstream es el mismo

El método de uso puede ser el mismo que cin y cout. Es decir, cingt; gt; coutlt; lt; nombre;

2. Utilice el modo de archivo:

ifstraem fin( "temp.txt", modo); >

ofstream fout;

fout.open("temp.txt", mode);

2) función abierta

En la clase fstream, existe La función miembro open() utilizada para abrir un archivo, su prototipo es:

void yWXz(const char* filename, int mode, int access

Descripción del parámetro:

nombre de archivo: el nombre del archivo que se va a abrir

modo: la forma de abrir el archivo

acceso: las propiedades del archivo abierto

La forma de abrir el archivo es en la clase Definida en ios (la clase base de todas las clases de E/S de flujo), los valores comúnmente utilizados son los siguientes:

Constante

Significado

Uso común

Constante

Significado

ios_base::in

Abre el archivo para leer

ios_base::app

agrega al final del archivo

escribe

escribe

trun

el archivo existe, trunca el archivo

comido

y se mueve al final del archivo

binario

binario

ios::nocreate: no crea el archivo, por lo que si el archivo no existe, la apertura falla

ios::noreplace: no sobrescribe el archivo , por lo que si el archivo existe, la apertura falla

ios::trunc: si el archivo existe, establezca la longitud del archivo en 0

El valor del atributo del archivo abierto es:

0: Archivo normal, acceso abierto

1: Archivo de solo lectura

2: Archivos ocultos

4: Archivos del sistema

Puede utilizar las propiedades "o" o "" para conectar las propiedades anteriores, por ejemplo 3 o 1|2 está abierto con un archivo de propiedades oculto y de solo lectura.

Por ejemplo, abra el archivo c:\config.sys en modo de entrada binaria

fstream file1

file1.open("c:\config. sys" , ios::binary|ios::in, 0);

Si la función abrir tiene solo un parámetro, el archivo se abre en modo de solo lectura. Si la función abrir tiene solo un parámetro, se abrirá como un archivo normal para lectura/escritura, es decir:

file1.open("c:\config.sys");lt;=gt ;file1.open(" c:\config.sys", ios::in|ios::out, 0);

Además, fstream también tiene una función similar a open ("c:\ config.sys", ios: :binary|ios: :in, 0);

Además, fstream también tiene una función similar a open. fstream también tiene el mismo constructor que open(), que en el ejemplo anterior abre el archivo cuando está definido:

fstream file1("c:\\config.sys"); p> En particular, fstream tiene dos subclases: ifstream (flujo de archivos de entrada) y ofstream (flujo de archivos de salida).

ifstream file2("c:\pdos.def"); //abre el archivo como entrada

ofstream file3("c:\x.123"); el archivo como salida

Tres formas de comprobar si el archivo está abierto:

a) if(fin. fail());

b) if( ! fin.good());

c) if(!fin) //Según fin.good()

d) is_open() //Se puede detectar texto inapropiado Errores de apertura de modo y varios errores detectados por el good() anterior

d) is_open() //Capaz de detectar errores de apertura de modo de texto inapropiado y varios errores detectados por el error good() anterior

d) is_open() //Capaz de detectar errores de apertura en modo texto inapropiado y varios errores detectados por el good() anterior

fin.good()

c) if(!good(); //devuelve verdadero cuando el archivo se lee normalmente

fin.fail(); //devuelve verdadero cuando el archivo llega al final o si hay otros errores de entrada como out de memoria

fin.eof(); //devuelve verdadero cuando el archivo llega al final.eof(); //devuelve verdadero cuando el archivo llega al final

Devuelve verdadero. cuando se llega al final del archivo

Cuatro formas de utilizar los parámetros de la línea de comando:

int main(int argc, char* argv[]. ){...}.

p>

fin.clear.eof(); //devuelve verdadero cuando el archivo llega al final. No necesariamente es necesario, pero no hace daño.

Constantes del modo de archivo V:

Modos de apertura de archivos para VI C y C

Modo C

Modo C

Significado

ios_base::in

"r"

Abrir una lectura

ios_base::out

"w"

Equivalente a ios_base::out|ios_base::trunk (a veces se puede omitir)

out|trunc

"w"< / p>

Abra algún archivo, por ejemplo, interceptelo si existe

out|app

"a"

Abra para escribir, agregue solo

in|out<

"r "

Abierto para escritura, escriba en la ubicación del archivo leído

in out| trunc

"w "

Abrir para lectura/escritura, si existe, intercepte el archivo primero

out|binary

cmodeb

Abrir en modo C y modo binario, por ejemplo: ios_base: .... Por ejemplo, ios_base::in|ios_base::binary se convierte en "rb"

out|ate

"cmode"

se abre en el modo especificado y hasta el final del archivo. Por ejemplo, ios_base::in|ios_base::ate se convertirá a "r" y la función C llamará fseek(file,0,seek_end);

Para el modo de aplicación, solo puede agregar, pero No modificar los datos existentes. Si desea modificar el archivo, debe combinarlo con el modo out, que es app|out. Para los archivos que han sido procesados, el bit eof se establecerá en 1, por lo que si desea modificar el archivo nuevamente, debe llamar a la función fout.clear() para finalizar el estado de la transmisión; de lo contrario, se prohibirá continuar. leer y escribir el archivo.

Siete métodos de lectura y escritura de archivos:

1) Entrada/salida de función de operador

El formato dec es entrada y salida de datos digitales decimales

endl Salida de nuevas líneas y salida de flujo de descarga

ends Salida de caracteres nulos

hex Formato de entrada y salida de datos numéricos hexadecimales

clear()

2) Función del operador

El formato oct de salida es la entrada y salida de datos numéricos octales

setpxecision(int p) establece la precisión de los números de punto flotante Número de bits Salida

2) Método básico

①put()

La función put() escribe un carácter en el flujo de datos y su prototipo es ofstream amp;. El uso de put (char ch) también es relativamente simple, como file1.put ('c');

② get()

La función get() es más flexible y tiene tres formas sobrecargadas de uso común:

Una corresponde a put() Forma: ifstream amp; get (char amp; ch); la función lee un carácter de la secuencia y el resultado se guarda en el canal de referencia. Si se llega al final del archivo, se devuelve un carácter nulo.

Por ejemplo, file2.get(x); significa leer un carácter del archivo y guardar el carácter leído en x.

Otra forma sobrecargada de este prototipo es: int get(); Esta forma devuelve un carácter de la secuencia y, si se llega al final del archivo, se devuelve EOF, por ejemplo x = file2.get. ( ); igual que la función de ejemplo anterior.

Existe otra forma de prototipo: ifstream amp; get(char *buf, int num, char delim='\n'); esta forma lee caracteres en la matriz señalada por buf, hasta el número. de caracteres leídos alcanza o encuentra el carácter especificado por delim; si no se utiliza el parámetro delim, se utilizará el carácter de nueva línea predeterminado '\n'. Por ejemplo

file2.get(str1, 127, 'A'); // Lee los caracteres del archivo en la cadena str1 y termina cuando se encuentra el carácter 'A' o se han obtenido 127 caracteres. leer.

③ Leer y escribir bloques de datos (lectura, escritura)

Para leer y escribir bloques de datos binarios, utilice las funciones miembro leer() y escribir(). Sus prototipos son los siguientes. siguiente:

p>

read(unsigned char *buf, int num

write(const unsigned char *buf, int num

read() lee del archivo el número de caracteres al búfer señalado por buf. Si el número de caracteres no ha llegado al final del archivo, puede usar la función miembro int gcount (); de caracteres leídos; y write() desde el búfer señalado por el área del búfer escribe el número de caracteres en el archivo;

Write() escribe el número de caracteres en el archivo desde el búfer señalado por el buffer. write() escribe num caracteres en el archivo desde el búfer al que apunta buf. Vale la pena señalar que el tipo de búfer es char * sin signo y, a veces, puede ser necesaria una conversión de tipo.

Ejemplo:

out.write(str1, strlen(str1)); //escribe toda la cadena str1 en yyyy.yyyy.yyyy

in. read((unsigned char*)n, sizeof(n)); //lee el entero especificado de xxx.xxx. Preste atención a la conversión de tipos

8. Funciones que leen archivos inmediatamente

A diferencia de la forma en que el lenguaje C maneja los archivos, el sistema de E/S C gestiona dos punteros asociados con el archivo. Uno es un puntero de lectura, que indica la posición de la operación de entrada en el archivo; el otro es un puntero de escritura, que indica la posición de la siguiente operación de escritura. Cada vez que se realiza una operación de entrada o salida, el puntero correspondiente cambia automáticamente. Por lo tanto, el posicionamiento del archivo C se divide en posicionamiento de posición de lectura y posicionamiento de posición de escritura. Las funciones miembro correspondientes son seekg () y seekp (). seekg () se usa para establecer la posición de lectura y seekp se usa para establecer la posición de escritura.

Sus formas más generales son las siguientes:

istream & seekg(streamoff offset, seek_dir origin);

ostream & seekp(streamoff offset, seek_dir origin

streamoff in Defined); en iostream.h, define el valor máximo que puede alcanzar el desplazamiento y seek_dir representa la posición base del movimiento, que es una enumeración con los siguientes valores:

ios::beg:file La posición inicial del archivo

ios::cur: La posición actual del archivo

ios::end: El final del archivo: La posición actual del archivo

ios: .end: Fin del archivo

Estas dos funciones generalmente se usan para archivos binarios, porque los archivos de texto pueden producir valores diferentes a los esperados debido a la interpretación de los caracteres del sistema.

Ejemplo:

file1.seekg(1234, ios::cur); //desplaza el puntero de lectura del archivo hacia atrás 1234 bytes desde la posición actual

file2 .seekg(1234, ios::cur); //desplaza el puntero de lectura del archivo hacia atrás 1234 bytes desde la posición actual