Aracılığıyla paylaş


dosya işleme Xamarin.Forms

ile Xamarin.Forms dosya işleme, .NET Standart kitaplığındaki kod kullanılarak veya ekli kaynaklar kullanılarak elde edilebilir.

Genel bakış

Xamarin.Forms kod, her biri kendi dosya sistemine sahip olan birden çok platformda çalışır. Daha önce bu, dosyaları okuma ve yazmanın her platformdaki yerel dosya API'leri kullanılarak en kolay şekilde gerçekleştirildiği anlamına geliyordu. Alternatif olarak, ekli kaynaklar veri dosyalarını bir uygulamayla dağıtmak için daha basit bir çözümdür. Ancak.NET Standard 2.0 ile .NET Standard kitaplıklarında dosya erişim kodunu paylaşmak mümkündür.

Görüntü dosyalarını işleme hakkında bilgi için Resimlerle Çalışma sayfasına bakın.

Dosyaları Kaydetme ve Yükleme

Sınıflar System.IO , her platformdaki dosya sistemine erişmek için kullanılabilir. File sınıfı, dosyaları oluşturmanıza, silmenize ve okumanıza olanak tanır ve Directory sınıfı dizinlerin içeriğini oluşturmanıza, silmenize veya numaralandırmanıza olanak tanır. Ayrıca, dosya işlemleri (dosya içinde sıkıştırma veya konum araması gibi) üzerinde daha fazla denetim sağlayan alt sınıfları da kullanabilirsiniz Stream .

Bir metin dosyası şu yöntem kullanılarak File.WriteAllText yazılabilir:

File.WriteAllText(fileName, text);

Bir metin dosyası şu yöntem kullanılarak File.ReadAllText okunabilir:

string text = File.ReadAllText(fileName);

Ayrıca yöntemi, File.Exists belirtilen dosyanın mevcut olup olmadığını belirler:

bool doesExist = File.Exists(fileName);

Her platformdaki dosyanın yolu, yönteminin ilk bağımsız değişkeni olarak sabit listesi değeri Environment.SpecialFolder kullanılarak bir .NET Standard kitaplığından Environment.GetFolderPath belirlenebilir. Daha sonra bu yöntemle bir dosya adıyla Path.Combine birleştirilebilir:

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

Bu işlemler, metin kaydeden ve yükleyen bir sayfa içeren örnek uygulamada gösterilmiştir:

Metin kaydetme ve yükleme

Kaynak Olarak Katıştırılmış Dosyaları Yükleme

Bir .NET Standart derlemesine dosya eklemek için bir dosya oluşturun veya ekleyin ve Derleme Eylemi: EmbeddedResource olduğundan emin olun.

GetManifestResourceStream, ekli dosyaya Kaynak Kimliğini kullanarak erişmek için kullanılır. Varsayılan olarak kaynak kimliği, eklendiği proje için varsayılan ad alanına ön ekli dosya adıdır; bu durumda derleme WorkingWithFiles ve dosya adı LibTextResource.txt olduğundan kaynak kimliği olur 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 ();
}

Değişkeni text daha sonra metni görüntülemek veya kodda başka bir şekilde kullanmak için kullanılabilir. Aşağıdaki ekran görüntüsünde bir Label denetimde işlenen metin gösterilmektedir:

.NET standart kitaplığına eklenmiş metin dosyası

XML'nin yüklenmesi ve seri durumdan çıkarılması da aynı derecede basittir. Aşağıdaki kod, bir kaynaktan yüklenen ve seri durumdan çıkarılan ve ardından görüntü için öğesine bağlanan bir ListView XML dosyasını gösterir. XML dosyası bir nesne dizisi Monkey içerir (sınıf örnek kodda tanımlanır).

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;

ListView'da görüntülenen .NET standart kitaplığına eklenmiş xml dosyası

Paylaşılan Projelere Ekleme

Paylaşılan Projeler ekli kaynak olarak da dosya içerebilir, ancak Paylaşılan Projenin içeriği başvuran projelerde derlendiğinden, katıştırılmış dosya kaynağı kimlikleri için kullanılan ön ek değişebilir. Bu, eklenen her dosyanın kaynak kimliğinin her platform için farklı olabileceği anlamına gelir.

Paylaşılan Projelerle ilgili bu sorunun iki çözümü vardır:

  • Projeleri Eşitle - Her platformun proje özelliklerini düzenleyerek aynı derleme adını ve varsayılan ad alanını kullanın. Bu değer daha sonra Paylaşılan Proje'deki ekli kaynak kimlikleri için ön ek olarak "sabit kodlanabilir".
  • derleyici yönergelerini #if - Doğru kaynak kimliği ön ekini ayarlamak için derleyici yönergelerini kullanın ve doğru kaynak kimliğini dinamik olarak oluşturmak için bu değeri kullanın.

İkinci seçeneği gösteren kod aşağıda gösterilmiştir. Derleyici yönergeleri, sabit kodlanmış kaynak ön ekini seçmek için kullanılır (normalde başvuran projenin varsayılan ad alanıyla aynıdır). Değişkeni resourcePrefix daha sonra eklenmiş kaynak dosya adıyla birleştirilerek geçerli bir kaynak kimliği oluşturmak için kullanılır.

#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");

Kaynakları Düzenleme

Yukarıdaki örneklerde, dosyanın .NET Standard kitaplık projesinin köküne eklendiği varsayılır ve bu durumda kaynak kimliği, ve WorkingWithFiles.iOS.SharedTextResource.txtgibi WorkingWithFiles.LibTextResource.txt Namespace.Filename.Extension biçimindedir.

Katıştırılmış kaynakları klasörler halinde düzenlemek mümkündür. Katıştırılmış bir kaynak bir klasöre yerleştirildiğinde, klasör adı kaynak kimliğinin bir parçası olur (noktalarla ayrılır), böylece kaynak kimliği biçimi Namespace.Folder.Filename.Extension olur. Örnek uygulamada kullanılan dosyaları MyFolder klasörüne yerleştirmek ilgili kaynak kimliklerini WorkingWithFiles.MyFolder.LibTextResource.txt ve WorkingWithFiles.iOS.MyFolder.SharedTextResource.txtyapar.

Katıştırılmış Kaynaklarda Hata Ayıklama

Belirli bir kaynağın neden yüklenmemiş olduğunu anlamak bazen zor olduğundan, kaynakların doğru yapılandırıldığını onaylamaya yardımcı olmak için aşağıdaki hata ayıklama kodu bir uygulamaya geçici olarak eklenebilir. Kaynak yükleme sorunlarının hatalarını ayıklamaya yardımcı olmak için verilen derlemeye eklenen tüm bilinen kaynakların Hatalar bölmesine çıkışını alır.

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);
}

Özet

Bu makalede, cihaza metin kaydetmeye ve yüklemeye ve ekli kaynakları yüklemeye yönelik bazı basit dosya işlemleri gösterilmiştir. .NET Standard 2.0 ile .NET Standard kitaplıklarında dosya erişim kodunu paylaşmak mümkündür.