2012-04-10 14 views
5

Mam projekt, który używa klas C++ i FFmpeg, muszę użyć fopen i napisać plik do piaskownicy aplikacji, więc kod, który muszę pisać w C++ jest odpowiednikiem:Potrzebuję pisać do pliku za pomocą fopen w klasie C++ dla projektu iOS

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

to by mnie do mojego app piaskownicy, gdzie mogę dość dużo manipulować moje pliki pytanie brzmi, jak mogę iść o pisanie tego kodu w C++, dzięki czemu można używać fopen na pliku?

Jest to sposób, który wymaga wykonania:

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()' jest API C, nie C++, który używa klasy 'fstream' i przyjaciół. Pokaż nam klasy, z którymi chcesz się zintegrować. – trojanfoe

+1

utworzyć plik .mm .. w ten sposób można używać zarówno C++, jak i obiekt-c –

Odpowiedz

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"); 

Komunikat -fileSystemRepresentation retruns char * odpowiednio zakodowane w systemie plików, np prawdopodobnie konwertowane na UTF-8

+0

Udało się świetnie, dzięki –

+0

Zauważyłem, że działa to dla symulatora, ale plik zwraca jako null na 4GS. Nie jestem pewien, czy to zauważyliście. Próbuję dodać rozwiązanie, gdy je otrzymam. – Dev2rights

+0

@ Dev2Rights: nie ma powodu, dla którego powyższy kod nie działałby na prawdziwym urządzeniu, chyba że brakuje tego pliku lub jest on nieczytelny. Jaka jest wartość 'errno' – JeremyP

Powiązane problemy