Странное поведение fopen на ios - PullRequest
3 голосов
/ 17 марта 2012

Я пытаюсь создать файл с помощью fopen, а затем записать его, но произошли странные вещи.

  1. Когда я подключаю iphone к USB-порту.Все отлично работаетФайл создается в каталоге tmp или в каталоге документов, как и ожидалось.
  2. Когда я отключаю устройство и делаю то же самое, файл не появляется.Мне было интересно, почему.

Я использую fopen для создания файла.В моем случае я должен сделать это, чтобы создать, а затем записать файл.Вызов fopen (pcm_output, "wb +");

Ответы [ 3 ]

6 голосов
/ 14 апреля 2012

Вам нужно использовать этот вызов.

    char const *path = [fileManager fileSystemRepresentationWithPath:url.path];

Из документов ...

fileSystemRepresentationWithPath: - (const char *) fileSystemRepresentationWithPath: (NSString *) путь

iOS (2.0 и более поздние версии)

Возвращает представление C-строки заданного пути, которое правильно кодирует строки Unicode для использования файловой системой.

путь: строковый объект, содержащий путь к файлу. C-string представление пути, которое правильно кодирует строки Unicode для использования файловой системой.

1 голос
/ 17 марта 2012

Вы, вероятно, пишете вне песочницы, можете ли вы опубликовать путь? В качестве теста попробуйте включить iTunes Sharing (это не должно иметь никакого эффекта, это просто тест) для вашего приложения.

EDIT:

После тестирования я обнаружил, что вы должны использовать:

NSString *docsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *filePath = [docsPath stringByAppendingPathComponent:[NSString stringWithCString:pcm_output encoding:NSUTF8StringEncoding]];    
fopen([filePath UTF8String], "wb+");

Вместо просто:

fopen([filePath UTF8String], "wb+");
0 голосов
/ 18 марта 2012
NSArray *paths = NSSearchPathForDirectoriesInDomains(
                                                 NSDocumentDirectory, 
                                                 NSUserDomainMask, YES
                                                 ); 
NSString* docDir = [paths objectAtIndex:0];
_tempLogPath = [docDir stringByAppendingPathComponent: @"Aisound5_CBLog.log"];
_tempPcmPath = [docDir stringByAppendingPathComponent: @"OutPcm.pcm"];
_tempWavPath = [docDir stringByAppendingPathComponent: @"OutWav.wav"];


tts_resource = [[bundle pathForResource:@"Resource_dev" ofType:@"irf"] UTF8String];
tts_log = [_tempLogPath UTF8String];
pcm_output = [_tempPcmPath UTF8String];
wav_output = [_tempWavPath UTF8String];

Исходный код такой, в котором tts_resource tts_log pcm_output и wav_output определены в файле .h и используются в файле .c с fopen.

Я пробовал на вашем пути инициализацииконстантная строка с явным стилем const char *, но проблема остается той же.

...