Bagikan melalui


Penanganan File di Xamarin.Forms

Penanganan file dengan Xamarin.Forms dapat dicapai menggunakan kode dalam pustaka Standar .NET, atau dengan menggunakan sumber daya yang disematkan.

Gambaran Umum

Xamarin.Forms kode berjalan pada beberapa platform - yang masing-masing memiliki sistem filenya sendiri. Sebelumnya, ini berarti bahwa membaca dan menulis file paling mudah dilakukan menggunakan API file asli di setiap platform. Atau, sumber daya yang disematkan adalah solusi yang lebih sederhana untuk mendistribusikan file data dengan aplikasi. Namun, dengan .NET Standard 2.0 dimungkinkan untuk berbagi kode akses file di pustaka .NET Standard.

Untuk informasi tentang menangani file gambar, lihat halaman Bekerja dengan Gambar .

Menyimpan dan Memuat File

Kelas System.IO dapat digunakan untuk mengakses sistem file di setiap platform. Kelas ini File memungkinkan Anda membuat, menghapus, dan membaca file, dan Directory kelas memungkinkan Anda membuat, menghapus, atau menghitung konten direktori. Anda juga dapat menggunakan Stream subkelas, yang dapat memberikan tingkat kontrol yang lebih besar atas operasi file (seperti kompresi atau pencarian posisi dalam file).

File teks dapat ditulis menggunakan File.WriteAllText metode :

File.WriteAllText(fileName, text);

File teks dapat dibaca menggunakan File.ReadAllText metode :

string text = File.ReadAllText(fileName);

Selain itu, File.Exists metode menentukan apakah file yang ditentukan ada:

bool doesExist = File.Exists(fileName);

Jalur file pada setiap platform dapat ditentukan dari pustaka Standar .NET dengan menggunakan nilai Environment.SpecialFolder enumerasi sebagai argumen pertama ke Environment.GetFolderPath metode . Ini kemudian dapat dikombinasikan dengan nama file dengan Path.Combine metode :

string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "temp.txt");

Operasi ini ditunjukkan dalam aplikasi sampel, yang mencakup halaman yang menyimpan dan memuat teks:

Menyimpan dan memuat teks

Memuat File yang Disematkan sebagai Sumber Daya

Untuk menyematkan file ke dalam rakitan .NET Standard , buat atau tambahkan file dan pastikan bahwa Build Action: EmbeddedResource.

GetManifestResourceStreamdigunakan untuk mengakses file yang disematkan menggunakan ID Sumber Dayanya. Secara default ID sumber daya adalah nama file yang diawali dengan namespace default untuk proyek yang disematkannya - dalam hal ini assembly adalah WorkingWithFiles dan nama file LibTextResource.txt, sehingga ID sumber daya adalah WorkingWithFiles.LibTextResource.txt.

var assembly = IntrospectionExtensions.GetTypeInfo(typeof(LoadResourceText)).Assembly;
Stream stream = assembly.GetManifestResourceStream("WorkingWithFiles.LibTextResource.txt");
string text = "";
using (var reader = new System.IO.StreamReader (stream))
{  
    text = reader.ReadToEnd ();
}

Variabel text kemudian dapat digunakan untuk menampilkan teks atau menggunakannya dalam kode. Cuplikan layar berikut menunjukkan teks yang dirender dalam Label kontrol:

File teks yang disematkan dalam pustaka standar .NET

Memuat dan mendeserialisasi XML sama-sama sederhana. Kode berikut menunjukkan file XML yang dimuat dan dideserialisasi dari sumber daya, lalu terikat ke ListView untuk ditampilkan. File XML berisi array Monkey objek (kelas ditentukan dalam kode sampel).

var assembly = IntrospectionExtensions.GetTypeInfo(typeof(LoadResourceText)).Assembly;
Stream stream = assembly.GetManifestResourceStream("WorkingWithFiles.LibXmlResource.xml");
List<Monkey> monkeys;
using (var reader = new System.IO.StreamReader (stream)) {
    var serializer = new XmlSerializer(typeof(List<Monkey>));
    monkeys = (List<Monkey>)serializer.Deserialize(reader);
}
var listView = new ListView ();
listView.ItemsSource = monkeys;

File Xml yang disematkan di pustaka standar .NET, ditampilkan di ListView

Menyematkan dalam Proyek Bersama

Proyek Bersama juga dapat berisi file sebagai sumber daya yang disematkan, namun karena konten Proyek Bersama dikompilasi ke dalam proyek referensi, awalan yang digunakan untuk ID sumber daya file yang disematkan dapat berubah. Ini berarti ID sumber daya untuk setiap file yang disematkan mungkin berbeda untuk setiap platform.

Ada dua solusi untuk masalah ini dengan Proyek Bersama:

  • Sinkronkan Proyek - Edit properti proyek untuk setiap platform untuk menggunakan nama rakitan dan namespace default yang sama . Nilai ini kemudian dapat "dikodekan secara permanen" sebagai awalan untuk ID sumber daya yang disematkan di Proyek Bersama.
  • #if direktif kompilator - Gunakan direktif kompilator untuk mengatur awalan ID sumber daya yang benar dan menggunakan nilai tersebut untuk membangun ID sumber daya yang benar secara dinamis.

Kode yang mengilustrasikan opsi kedua ditunjukkan di bawah ini. Direktif kompilator digunakan untuk memilih awalan sumber daya yang dikodekan secara permanen (yang biasanya sama dengan namespace default untuk proyek referensi). Variabel resourcePrefix kemudian digunakan untuk membuat ID sumber daya yang valid dengan menggabungkannya dengan nama file sumber daya yang disematkan.

#if __IOS__
var resourcePrefix = "WorkingWithFiles.iOS.";
#endif
#if __ANDROID__
var resourcePrefix = "WorkingWithFiles.Droid.";
#endif

Debug.WriteLine("Using this resource prefix: " + resourcePrefix);
// note that the prefix includes the trailing period '.' that is required
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(SharedPage)).Assembly;
Stream stream = assembly.GetManifestResourceStream
    (resourcePrefix + "SharedTextResource.txt");

Menata Sumber Daya

Contoh di atas mengasumsikan bahwa file disematkan di akar proyek pustaka .NET Standard, dalam hal ini ID sumber daya adalah formulir Namespace.Filename.Extension, seperti WorkingWithFiles.LibTextResource.txt dan WorkingWithFiles.iOS.SharedTextResource.txt.

Dimungkinkan untuk mengatur sumber daya yang disematkan dalam folder. Ketika sumber daya yang disematkan ditempatkan dalam folder, nama folder menjadi bagian dari ID sumber daya (dipisahkan oleh titik), sehingga format ID sumber daya menjadi Namespace.Folder.Filename.Extension. Menempatkan file yang digunakan dalam aplikasi sampel ke dalam folder MyFolder akan membuat ID WorkingWithFiles.MyFolder.LibTextResource.txt sumber daya yang sesuai dan WorkingWithFiles.iOS.MyFolder.SharedTextResource.txt.

Men-debug Sumber Daya yang Disematkan

Karena terkadang sulit untuk memahami mengapa sumber daya tertentu tidak dimuat, kode debug berikut dapat ditambahkan sementara ke aplikasi untuk membantu mengonfirmasi bahwa sumber daya dikonfigurasi dengan benar. Ini akan menghasilkan semua sumber daya yang diketahui yang disematkan dalam rakitan yang diberikan ke pad Kesalahan untuk membantu men-debug masalah pemuatan sumber daya.

using System.Reflection;
// ...
// use for debugging, not in released app code!
var assembly = IntrospectionExtensions.GetTypeInfo(typeof(SharedPage)).Assembly;
foreach (var res in assembly.GetManifestResourceNames()) {
    System.Diagnostics.Debug.WriteLine("found resource: " + res);
}

Ringkasan

Artikel ini telah menunjukkan beberapa operasi file sederhana untuk menyimpan dan memuat teks pada perangkat, dan untuk memuat sumber daya yang disematkan. Dengan .NET Standard 2.0 dimungkinkan untuk berbagi kode akses file di pustaka .NET Standard.