C - fwrite () No dar salida a archivo
Pregunta
Nunca fwrite usada (), así que no estoy seguro exactamente lo que estoy haciendo mal. Sólo estoy probando ahora y todo lo que quiero hacer es tratar de escribir una sola carbón en un archivo hasta que se llega al final. El archivo que estoy escribiendo a es uno que he descargado desde el sitio web de mi maestro. Cuando compruebo las propiedades de la misma, el tipo solamente aparece como "archivo". Se supone que es simplemente un archivo de 2 MB vacío para que escribamos nuestro código (laboratorio de sistema de archivos si alguien está preguntando). Aquí está mi código:
#include <stdio.h>
#include <string.h>
int main()
{
char c;
FILE *fp;
char testing[2] = {'c'};
fp = fopen("Drive2MB", "rw");
fseek(fp, 0, SEEK_SET); //make sure pointers at beginning of file
while((c=fgetc(fp))!=EOF)
{
fwrite(testing, 1, sizeof(testing), fp);
fseek(fp, 1, SEEK_CUR); //increment pointer 1 byte
}
fclose(fp);
}
Cuando ejecuto esto, un mensaje de error aparece diciendo "depuración de aserción ... Expresión :(!" Modo de archivo no válido abierta "0) y grabados" El programa '[3896] filesystem.exe: Nativo' tiene salido con código 3 (0x3) ".
Solución
Tiene que haber abierto el archivo para lectura (que es lo que la r
significa en fopen("Drive2MB", "r");
). El usuario no puede escribir en un archivo abierto para lectura.
Otros consejos
va a abrir en modo de sólo lectura
Uso r + para el fopen
fp = fopen("Drive2MB", "r")
su openning su archivo de sólo lectura
try
fp = fopen("Drive2MB", "r+");
que haya abierto el archivo para leer con la parte "r" de fopen. Escribir en el archivo, puede abrirlo en modo de lectura / escritura o modo de escritura.
// Read/write mode
fp = fopen("Drive2MB", "r+");
// Write only mode
fp = fopen("Drive2MB", "w");
Nunca les gusta usar "rw" personalmente. Al abrir un archivo, lo que realmente debe tener una razón para ser abierto. También no es necesario fseek llamada a ir al principio del archivo y que no es necesario el uso fseek para avanzar el puntero del archivo. fopen se abrirá automáticamente en el inicio del archivo y fwrite avanzará automáticamente el puntero. fseek sólo debe utilizarse si usted es "buscar" ing dentro del archivo para llegar a un punto específico.
En el caso de que has dado, que sería sólo necesita escribir el modo ( "w") ya que no están siempre leyendo desde el archivo.