Запись в файл в iOS с использованием C / C ++ - PullRequest
6 голосов
/ 17 марта 2011

Можно ли создать текстовый файл с помощью вызовов C / C ++ в iOS? Можно ли тогда открыть и прочитать файл из-за пределов приложения? Таким образом, приложение A создает текстовый файл, где у него есть права на запись, а приложение B затем читает из него. Или забыть приложение B, могу ли я просто открыть его и прочитать?

Ответы [ 2 ]

13 голосов
/ 18 августа 2016

Поскольку вопрос явно касается C / C ++, а НЕ Obj-C, я добавляю этот ответ, который я видел здесь и может кому-то помочь:

char buffer[256];

//HOME is the home directory of your application
//points to the root of your sandbox
strcpy(buffer,getenv("HOME"));

//concatenating the path string returned from HOME
strcat(buffer,"/Documents/myfile.txt");

//Creates an empty file for writing
FILE *f = fopen(buffer,"w");

//Writing something
fprintf(f, "%s %s %d", "Hello", "World", 2016);

//Closing the file
fclose(f);

Используя этот код C:

buffer = "/private/var/mobile/Containers/Data/Application/6DA355FB-CA4B-4627-A23C-B1B36980947A/Documents/myfile.txt"

В то время как версия Obj-C:

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

возвращает

documentsDirectory = /var/mobile/Containers/Data/Application/6DA355FB-CA4B-4627-A23C-B1B36980947A/Documents

FYI, если вы заметили о "личное "небольшая разница, я написал в оба места, и они оказались одинаковыми.

6 голосов
/ 17 марта 2011

Да.

Используйте NSFileHandle, чтобы получить доступ для чтения / записи к файлам, и NSFileManager, чтобы создавать каталоги, просматривать их содержимое и делать все другие виды доступа к файловой системе.

Просто помните, что каждое приложение находится в «песочнице» и может записывать только в свои назначенные каталоги.Вы можете получить путь к этим каталогам с помощью кода, подобного следующему:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;

Однако вы можете не получать доступ к файлам другого приложения.

iTunes автоматически создает резервные копии этихкаталоги, поэтому они автоматически восстанавливаются, если пользователь выполняет восстановление устройства.Также имейте в виду, что вам не следует «выставлять» файловую систему пользователям приложения в виде файловых браузеров или «диалоговых окон сохранения» и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...