Узнайте, как писать код в приложениях Магазина Windows для Windows 8 для сохранения файлов, таких как фотографии или документы . Вы можете хранить эти файлы в определенных местах приложения или сохранять их на внешнем носителе, например на USB-накопителе.
Пользователь может захотеть сохранить документ, над которым он работает, и сразу же вернуться к сохраненному документу, когда вернется в какое-либо приложение для редактирования документов. Или пользователь может захотеть сохранить текущую фотографию из какого-либо приложения для редактирования фотографий на USB-накопитель, а затем подключить этот USB-накопитель к телевизору или цифровой фоторамке для просмотра позже. Вы можете помочь своим пользователям сделать это, сохранив документ в определенном для приложения месте на устройстве пользователя и сохранив фотографию на внешнем носителе.
Вот как хранилище файлов для конкретных приложений работает за кулисами в приложениях Магазина Windows. Каждое приложение может хранить файлы в отдельном наборе каталогов (называемых локальными , перемещаемыми и временными каталогами) на определенном устройстве:
· Локальный каталог содержит файлы, которые существуют только на локальном устройстве.
· Каталог роуминга содержит файлы, которые существуют на всех устройствах, где пользователь установил приложение.
· Временный каталог похож на локальный каталог, но система может удалить его файлы в любое время.
Когда пользователь устанавливает приложение Магазина Windows, Windows автоматически создает эти каталоги. Вам не нужно беспокоиться о том, где их найти, потому что Windows отслеживает их для вас. Вы просто используете класс ApplicationData для доступа к ним. Если пользователь удаляет приложение, Windows автоматически удаляет соответствующие каталоги, поэтому вам даже не нужно беспокоиться об их очистке.
Совет Windows |
Если пользователь хочет хранить специфичные для приложения файлы, которые являются особенно ценными или незаменимыми, пусть ваше приложение хранит их в более постоянном месте, например, в SkyDrive пользователя. |
Для хранения файлов на внешних носителях вы можете использовать классы DeviceInformation и StorageDevice . Подробнее об этом позже.
Вот как это сделать в коде.
Сохраните файл в каталог приложения
В приложении Магазина Windows, чтобы сохранить файл с именем hello.txt, напишите такой код для локального каталога.
var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("Hello.txt"); await FileIO.WriteTextAsync(file, "Hello world!");
Или напишите такой код для роумингового каталога.
var file = await ApplicationData.Current.RoamingFolder.CreateFileAsync("Hello.txt"); await FileIO.WriteTextAsync(file, "Hello world!");
И вы можете написать такой код для временного каталога.
var tempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync("TempFile.txt");
Android-совет |
В приложениях для Android напишите такой код для локального каталога. |
File tempFile; tempFile = File.createTempFile("TempFile.txt", null, context.getCacheDir());
String filename = "hello.txt"; String string = "Hello world!"; FileOutputStream outputStream; outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(string.getBytes());outputStream.close();
Установите режим создания файла на MODE_PRIVATE, чтобы другие приложения не могли получить доступ к файлам вашего приложения. Приложения Магазина Windows, напротив, могут получать доступ только к своим файлам.
Напишите такой код для временного каталога.
Сохранение файла на внешнем хранилище
В приложении Магазина Windows вы должны объявить возможность съемного хранилища в файле Package.appsxmanifest, связанном с вашим приложением.
После того, как вы объявите эту возможность, проверьте, доступен ли внешний носитель с помощью кода, подобного этому.
public async Task<bool> IsExternalStorageAvailable() { var devices = await DeviceInformation.FindAllAsync(StorageDevice.GetDeviceSelector()); if (devices.Count > 0) return true; else return false; }
Если доступен внешний носитель, создайте файл, используя следующий код.
var storage = StorageDevice.FromId(deviceInformation.Id); await storage.CreateFileAsync("HelloWorld.png");
Android-совет |
В приложениях Android, чтобы сделать нечто подобное, сначала запросите разрешение WRITE_EXTERNAL_STORAGE в манифесте вашего приложения, например так. |
<manifest> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> </manifest>
После того, как вы запросите это разрешение, проверьте, доступны ли внешние носители, используя такой код.
public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; }
Если внешний носитель данных доступен, вы можете создать файл. Например, чтобы создать файл в каталоге «Изображения», напишите следующий код.
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "HelloWorld.png");