2012-04-10 25 views
5

Tengo un proyecto que usa clases C++ y FFmpeg, necesito usar fopen y escribir un archivo en la zona de pruebas de la aplicación, por lo que el código que necesito escribir en C++ es el equivalente a:Necesito escribir en un archivo usando fopen en una clase C++ para el proyecto iOS

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docs_dir = [paths objectAtIndex:0]; 

esto haría conmigo a mi caja de arena aplicación, donde puedo más o menos manipular mis archivos la cuestión es cómo hago para escribir este código en C++ para que pueda utilizar fopen en un archivo?

Este es el método que necesita la aplicación:

int testGrabAndWrite(const char* streamURL, bool decode, const char* filename) 
{ 
    FILE *outfile; 
    int ret; 
    int counter = 0; 
    uint8_t *data;    // Pointer to the received audio mem 
    int size;     // Size of the received audio buffer 


    outfile = fopen(filename, "w"); 

    if (outfile == NULL) 
     exit(1); 

    // Open the RTP stream 
    if ((ret = openStream(streamURL, decode)) < 0) 
     return ret; 

    // Print out info about the stream found 
    int tmpSampleRate, tmpBitRate, tmpChannels; 
    ret = getStreamInfo(tmpSampleRate, tmpBitRate, tmpChannels); 
    printf("\nSample rate:%d Bit rateL%d Channels:%d\n",tmpSampleRate,tmpBitRate, tmpChannels); 

    // Grab some sample data and write it to file. 
    while (counter < 500) 
    { 
     ret = getStreamData(data, size); 
     fwrite(data, 1, size, outfile);        // Write RTP packets, i.e. mp3, to file. 
     printf("Wrote packet %d with size %d which returned %d. ", ++counter, size, ret); 
    } 

    fclose(outfile); 
    closeStream(); 

    return ret; 
} 
+2

'fopen()' es una API C, no C++ que usa la clase 'fstream' y sus amigos. Muéstranos las clases con las que necesitas integrarte. – trojanfoe

+1

crear un archivo .mm ... de esta manera puede utilizar tanto C++ como Object-C –

Respuesta

7
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docs_dir = [paths objectAtIndex:0]; 
NSString* aFile = [docs_dir stringByAppendingPathComponent: @"somedocthatdefinitelyexists.doc"]; 

FILE* fp = fopen([aFile fileSystemRepresentation], "r"); 

El mensaje -fileSystemRepresentation Retruns un char * adecuadamente codificada para el sistema de archivos, por ejemplo, probablemente convertido a UTF-8

+0

Funcionó de maravilla, gracias –

+0

Me he dado cuenta de que esto funciona para el simulador pero el archivo vuelve como nulo en el 4GS. No estoy seguro de que ustedes hayan notado esto. Trataré de agregar la solución cuando la obtenga. – Dev2rights

+0

@ Dev2Rights: no hay ninguna razón por la cual el código anterior no debería funcionar en un dispositivo real a menos que el archivo no se encuentre o no se pueda leer. ¿Cuál es el valor de 'errno' – JeremyP

Cuestiones relacionadas