Tengo una tarea en C++. La tarea es pedir la conversión de un programa c a C++. A continuación es la pregunta:necesita ayuda para convertir c a C++ (error simple pero no se puede arreglar)
Se le pide que convertir la siguiente función C en una función de C++ y luego incrustarlo en un programa completo y probarlo. Observe que esta función copia un archivo binario de enteros y no un archivo de texto . El programa debe aceptar los argumentos (el archivo para copiar y el archivo que se va a copiar) desde la línea de comandos.
/* ==================== cpyFile =====================
This function copies the contents of a binary file
of integers to a second file.
Pre fp1 is file pointer to open read file
fp2 is file pointer to open write file
Post file copied
Return 1 is successful or zero if error
*/
int cpyFile (FILE *fp1, FILE *fp2)
{
/* Local Definitions */
int data;
/* Statements */
fseek (fp1, 0, SEEK_END);
if (!ftell (fp1))
{
printf ("\n\acpyFile Error : file empty\n\n");
return 0;
} /* if open error */
if (fseek (fp1, 0, SEEK_SET))
return 0;
if (fseek (fp2, 0, SEEK_SET))
return 0;
while (fread (&data, sizeof (int), 1, fp1))
fwrite (&data, sizeof (int), 1, fp2);
return 1;
} /* cpyFile */
Hice lo que pude y logró convertirlo, pero por desgracia, cuando lo estoy usando, el archivo que consigo después de la copia está vacía. A continuación se muestra mi respuesta:
#include <fstream>
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
if(argc!=3)
{cerr<<"invalid number of arguments. must be 3."<<endl;exit(1);}
fstream fp1(argv[1],ios::in);
if(!fp1)+{cerr<<argv[1]<<" could not be opened"<<endl;exit(1);}
fstream fp2(argv[2],ios::out);
if(!fp2)+{cerr<<"file could not be found."<<endl;exit(1);}
int data;
fp1.seekg (0,ios::end);
if (!fp1.tellg())
{
cout<<"\n\acpyFile Error : file empty\n\n";
return 0;
} /* if open error */
if (fp1.seekg (0, ios::beg))
return 0;
if (fp2.seekg (0, ios::beg))
return 0;
while (fp1.read (reinterpret_cast<char*>(&data), sizeof (int)))
{
fp2.seekp(0);
fp2.write (reinterpret_cast<char*>(&data), sizeof (int));
}
return 1;
}
hice todo lo posible y todo está funcionando bien, excepto que cuando copiar un archivo binario, el archivo que me sale es vacía y no tengo ni idea de por qué.
Un buen intento, lo recomiendo por darle una oportunidad decente en vez de simplemente pedirle a alguien que lo haga por usted. – dreamlax
No hagas esto en tu tarea, pero para futuras referencias: 'std :: ofstream (argv [2]) << std :: ifstream (argv [1]);' –
¿Por qué tienes 'fp2.seekp (0) '* in * the loop? – celtschk