Подтвердить что ты не робот

Запись в файл в Monotouch

Как мне создать и записать файл в приложении iPhone Monotouch?

Файл должен сохраняться между запусками приложений, поэтому я предполагаю, что он должен быть размещен где-то в комплекте приложения (документы или ресурсы?).

4b9b3361

Ответ 1

[ Примечание.. Мой ответ довольно тщательный, потому что я не знаю вашего уровня понимания пакетов приложений или структуры вашего iPhone-приложения, изолированного маленьким миром, - извинения, если я расскажу о вещах, которые вы уже знаете - Я предпочитаю писать слишком много, чем слишком мало, и добавить немного о том, почему при обсуждении того, как...]

У вас есть несколько вариантов (конечно). Я предполагаю, что вы уже знакомы с .Net в какой-то степени и что ваш вопрос связан с тем, как это сделать iPhone Way.

Каждое приложение для iPhone (и вы увидите то же самое для приложений на OS X) - это "пакет", который не является исполняемым в традиционном смысле, но на самом деле является иерархией папок, внутри которой живет бинарный файл приложения ( наряду с ресурсами, настройками и т.д.).

Из-за того, что у iPhone-приложения с изолированной песочницей, у вас нет доступа к общим папкам, которые вы обычно сможете использовать при разработке настольных систем (имея, например, общую папку Documents, которая живет под пользователем домашняя папка, к которой у приложений есть доступ).

Вместо этого ваше приложение имеет свою собственную иерархию папок, которая, как и его собственный набор папок, которые обычно будут доступны для разных приложений.

Самый простой способ увидеть, как выглядит ваша структура папок приложения на телефоне, - это посмотреть папку, которую использует симулятор iPhone для установки приложений, настроек, бла-бла-бла. На моей машине (я не помню, если это настраивается, но, вероятно, это то же самое в вашей системе), вы можете попасть в папку по этому пути:

~/Library/Application Support/iPhone Simulator

Внутри этого есть папка User/Applications, содержащая приложения, которые вы установили в симулятор. Перейдите в любую из этих папок, и вы увидите структуру папок, к которой ваше приложение будет иметь доступ к телефону.

Для хранения файлов, которые вы хотите сохранить в сеансах приложений, папка "Документы приложений" - это место. Это не ваш единственный выбор для создания файлов, но это правильный выбор для этой работы. В дополнение к сохраненным файлам их хранение в папке "Документы" также будет зависеть от iTunes при синхронизации пользователя.

В MonoTouch вы можете получить путь к папке "Документы" приложения с помощью Environment.GetFolderPath(Environment.SpecialFolder.Personal);

Если вы хотите проверить это, это очень простой код, который напишет файл под названием "out.txt" в папку приложений "Документы" . Этот код также считывает содержимое файла, чтобы показать, что он был создан - для дальнейшей проверки перейдите в папку "Приложения для симуляторов", отсортируйте папки приложений по дате их изменения, разверните их в последнее изменение и загляните в его документы папке - вы найдете "out.txt" (вы не можете найти папку своего приложения по имени, потому что, когда ваше приложение установлено, оно заполняется внутри папки с именем "2B3CA854-FADB-4DDC-9732-0E61B3DD8D8C" - сортировка папок по дате их изменения укажет вам на последнее измененное приложение, которое в этом случае является любым приложением, содержащим следующий код):

// For this to function, don't forget "using System.IO;"

// If you're just playing around with this to see it work, place it inside
// your AppDelegate "FinishedLaunching" method in main.cs

string path = Environment.GetFolderPath (Environment.SpecialFolder.Personal);
string filePath = Path.Combine(path, "out.txt");

// File.WriteAllText will create a file and then write text to it. If the
// file already exists, File.WriteAllText will overwrite it.
File.WriteAllText(filePath, "Howdy, world.");

// Now we prove it worked by reading the contents of the file and then
// printing them to the console...   
string text = File.ReadAllText(filePath);
Console.WriteLine(text);

Итак, единственное, что действительно подходит iPhone, - это знать, что "Environment.SpecialFolder.Personal" сопоставляется с папкой "Документы приложений". Кроме того, это .Net, как обычно.

И, опять же, это, вероятно, было излишним, но я хотел достаточно тщательно ответить всем, кто его видит - надеюсь, что это поможет:)

Ответ 3

Вы можете сделать что-то подобное во время выполнения:

using (StreamWriter writer = new StreamWriter (Path.Combine (Environment.SpecialFolders.Documents, "yourfilename.ext"))) { }

и это создаст файл. Чтобы открыть его для чтения, используйте тот же Path.Combine(), но с StreamReader.