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:
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:
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;
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.txt
gibi 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.txt
yapar.
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.