Dosya IŞLEME Xamarin.Forms

Örnek indir Örneği indirin

İle dosya işleme , .NET Standard kitaplığındaki kod kullanılarak veya gömülü kaynaklar kullanılarak elde edilebilir.

Genel Bakış

Xamarin.Forms kod, her birinin kendi dosya sistemine sahip olan birden çok platformda çalışır. Daha önce, bu dosya okuma ve yazma, her platformda yerel dosya API 'Lerini kullanarak en kolay şekilde gerçekleştirilmiş olduğunu gösterdi. Alternatif olarak, gömülü kaynaklar veri dosyalarını bir uygulamayla dağıtmaya yönelik 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 daha fazla bilgi için görüntülerle çalışma sayfasına bakın.

Dosyaları kaydetme ve yükleme

System.IOSınıflar her platformda dosya sistemine erişmek için kullanılabilir. FileSınıfı, dosyaları oluşturmanızı, silmenizi ve okumanızı sağlar ve Directory sınıfı, dizinlerin içeriğini oluşturmanıza, silmenize veya listelemenizi sağlar. StreamDosya işlemleri üzerinde daha fazla denetim sağlayan alt sınıfları da kullanabilirsiniz (örneğin, bir dosya içinde sıkıştırma veya konum arama gibi).

Bir metin dosyası, yöntemi kullanılarak yazılabilir File.WriteAllText :

File.WriteAllText(fileName, text);

Bir metin dosyası, yöntemi kullanılarak okunabilir File.ReadAllText :

string text = File.ReadAllText(fileName);

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

bool doesExist = File.Exists(fileName);

Her platformda dosyanın yolu, Environment.SpecialFolder metodun ilk bağımsız değişkeni olarak numaralandırmanın bir değeri kullanılarak bir .NET Standard kitaplığından belirlenebilir Environment.GetFolderPath . Bu daha sonra yöntemi ile birlikte bir dosya adı ile birleştirilebilir Path.Combine :

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:

kaydetme ve yüklememetin yükleme

Kaynak olarak katıştırılmış dosyaları yükleme

Bir dosyayı .NET Standard bir derlemeye eklemek için bir dosya oluşturun veya ekleyin ve derleme eylemi: EmbeddedResource' in olduğundan emin olun.

GetManifestResourceStream , GetManifestResourceStreamkullanarak katıştırılmış dosyaya erişmek için kullanılır. Varsayılan olarak kaynak KIMLIĞI, eklendiği projenin varsayılan ad alanına ön eki eklenmiş olan dosya adıdır; bu durumda derleme Workingwithfiles ve filename LibTextResource.txt, bu nedenle kaynak kimliği olur .

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

textDeğişken daha sonra metni göstermek veya kod içinde kullanmak için kullanılabilir. Örnek uygulamanın bu ekran görüntüsü, denetimde işlenen metni gösterir .

Uygulama metin dosyasında katıştırılmış ,Text file embedded in .NET standard library.NET Standard kitaplığındaki dosyasında gösterilir

XML 'nin yüklenmesi ve serisini kaldırma işlemi de kolaydır. Aşağıdaki kod, bir kaynaktan yüklenen ve seri durumdan çıkarılan bir XML dosyasını gösterir ve ardından bir görüntülenmek üzere öğesine bağlanır ListView . XML dosyası bir nesne dizisi içerir Monkey (sınıf, örnek kodda tanımlanmıştı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;

.Net standart kitaplığı 'nda katıştırılmış ListViewXML dosyasında,ListView 'da görünen .net standart kitaplığı 'nda ListView dosyasında görünen katıştırılmış XML dosyası.

Paylaşılan projelere ekleme

paylaşılan projeler, gömülü kaynak olarak dosyaları da içerebilir, ancak paylaşılan bir Project içerikleri başvuran projelere derlenerek, gömülü dosya kaynak kimlikleri için kullanılan önek değişebilir. Bu, her bir katıştırılmış dosyanın kaynak KIMLIĞININ her platformda farklı olabileceği anlamına gelir.

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

  • Projeleri eşitler - aynı derleme adını ve varsayılan ad alanını kullanmak için her platformun proje özelliklerini düzenleyin. Bu değer, paylaşılan Project eklenmiş kaynak kimliklerinin öneki olarak "sabit kodlanmış" olabilir.
  • derleyici yönergelerini #if -derleyici yönergelerini kullanarak doğru kaynak kimliği önekini ayarlayı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 önekini (normalde başvuran proje için varsayılan ad alanıyla aynı) seçmek için kullanılır. resourcePrefixDaha sonra değişken, gömülü kaynak dosya adıyla birleştirerek 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ığı projesinin köküne gömülü olduğu varsayılır; bu durumda kaynak KIMLIĞI ad alanı. FileName. Extension, ve gibi WorkingWithFiles.iOS.SharedTextResource.txt .

Klasörlerdeki katıştırılmış kaynakları düzenlemek mümkündür. Bir klasöre katıştırılmış bir kaynak yerleştirildiğinde, klasör adı kaynak KIMLIĞININ bir parçası olur (noktalarla ayırarak), böylece kaynak KIMLIĞI biçimi ad alanı. Folder. FileName. Extensionolur. Örnek uygulamada kullanılan dosyaların klasörü myFolder olarak yerleştirilmesi, karşılık gelen kaynak kimliklerini ve bunu yapar WorkingWithFiles.iOS.MyFolder.SharedTextResource.txt .

Katıştırılmış kaynaklarda hata ayıklama

Belirli bir kaynağın neden yüklenmediğini anlamak bazen zor olduğundan, kaynakların doğru şekilde yapılandırıldığını onaylamak için aşağıdaki hata ayıklama kodu bir uygulamaya geçici olarak eklenebilir. Kaynak yükleme sorunlarını ayıklamanıza yardımcı olmak için, verilen derlemede bulunan bilinen tüm kaynakları hatalar paneline çıktı olarak verir.

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 kaydetme ve yükleme ve katıştırılmış kaynakları yükleme için bazı basit dosya işlemleri gösterildi. .NET Standard 2,0 ile .NET Standard kitaplıklarında dosya erişim kodunu paylaşmak mümkündür.