Zpracování souborů v Xamarin.Forms

Download Sample Stažení ukázky

Zpracování souborů pomocí Xamarin.Forms kódu v knihovně .NET Standard nebo pomocí vložených prostředků.

Přehled

Xamarin.Forms Kód běží na několika platformách – každý z nich má svůj vlastní systém souborů. Dříve to znamenalo, že čtení a zápis souborů bylo nejčastěji provedeno pomocí nativních rozhraní API souborů na každé platformě. Vložené prostředky jsou alternativně jednodušším řešením distribuce datových souborů pomocí aplikace. S .NET Standard 2.0 je však možné sdílet přístupový kód souboru v knihovnách .NET Standard.

Informace o zpracování souborů obrázků najdete na stránce Práce s obrázky .

Ukládání a načítání souborů

Třídy System.IO lze použít pro přístup k systému souborů na každé platformě. Třída File umožňuje vytvářet, odstraňovat a číst soubory a Directory třída umožňuje vytvářet, odstraňovat nebo vyčíslovat obsah adresářů. Můžete také použít Stream podtřídy, které můžou poskytovat větší míru kontroly nad operacemi se soubory (jako je komprese nebo hledání umístění v souboru).

Textový soubor lze zapsat pomocí File.WriteAllText metody:

File.WriteAllText(fileName, text);

Textový soubor lze přečíst pomocí File.ReadAllText metody:

string text = File.ReadAllText(fileName);

Kromě toho metoda určuje, File.Exists zda zadaný soubor existuje:

bool doesExist = File.Exists(fileName);

Cestu k souboru na každé platformě lze určit z knihovny .NET Standard pomocí hodnoty Environment.SpecialFolder výčtu jako prvního argumentu metody Environment.GetFolderPath . To se pak dá zkombinovat s názvem souboru s metodou Path.Combine :

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

Tyto operace jsou demonstrované v ukázkové aplikaci, která obsahuje stránku, která ukládá a načítá text:

Saving and loading text

Načítání souborů vložených jako prostředky

Pokud chcete vložit soubor do sestavení .NET Standard , vytvořte nebo přidejte soubor a ujistěte se, že akce sestavení: EmbeddedResource.

GetManifestResourceStream slouží k přístupu k vloženým souborům pomocí jeho ID prostředku. ID zdroje je ve výchozím nastavení název souboru s předponou výchozího oboru názvů projektu, do něhož je vložený – v tomto případě je sestavení WorkingWithFiles a název souboru je LibTextResource.txt, takže ID zdroje je 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 ();
}

Proměnnou text pak můžete použít k zobrazení textu nebo ho jinak použít v kódu. Tento snímek obrazovky ukázkové aplikace zobrazuje text vykreslený v ovládacím Label prvku.

Text file embedded in .NET standard library

Načítání a deserializace XML je stejně jednoduché. Následující kód ukazuje soubor XML, který se načítá a deserializuje z prostředku a pak je svázán s objektem ListView pro zobrazení. Soubor XML obsahuje pole Monkey objektů (třída je definována v vzorovém kódu).

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;

Xml file embedded in .NET standard library, displayed in ListView

Vkládání do sdílených projektů

Sdílené projekty mohou také obsahovat soubory jako vložené prostředky, ale protože obsah sdíleného projektu je zkompilován do odkazovaných projektů, může se změnit předpona použitá pro ID vložených prostředků souborů. To znamená, že ID prostředku pro každý vložený soubor se může pro každou platformu lišit.

Existují dvě řešení tohoto problému se sdílenými projekty:

  • Synchronizovat projekty – Upravte vlastnosti projektu pro každou platformu tak, aby používaly stejný název sestavení a výchozí obor názvů. Tato hodnota pak může být pevně zakódovaná jako předpona pro vložené ID prostředků ve sdíleném projektu.
  • #if direktivy kompilátoru – Pomocí direktiv kompilátoru nastavte správnou předponu ID prostředku a tuto hodnotu použijte k dynamickému vytvoření správného ID prostředku.

Kód znázorňující druhou možnost je zobrazen níže. Direktivy kompilátoru slouží k výběru pevně zakódované předpony prostředku (což je obvykle stejné jako výchozí obor názvů pro odkazující projekt). Proměnná resourcePrefix se pak použije k vytvoření platného ID prostředku tím, že ho zřetězením s vloženým názvem prostředku.

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

Uspořádání prostředků

Výše uvedené příklady předpokládají, že soubor je vložen do kořenového adresáře projektu knihovny .NET Standard, v takovém případě je ID prostředku ve formátu Namespace.Filename.Extension, například WorkingWithFiles.LibTextResource.txt a WorkingWithFiles.iOS.SharedTextResource.txt.

Vložené prostředky je možné uspořádat do složek. Když se vložený prostředek umístí do složky, název složky se stane součástí ID prostředku (oddělené tečkami), aby formát ID prostředku byl obor názvů.Folder.Filename.Extension. Umístění souborů použitých v ukázkové aplikaci do složky MyFolder by udělalo odpovídající ID WorkingWithFiles.MyFolder.LibTextResource.txt prostředků a WorkingWithFiles.iOS.MyFolder.SharedTextResource.txt.

Ladění vložených prostředků

Vzhledem k tomu, že je někdy obtížné pochopit, proč se konkrétní prostředek nenačítá, je možné dočasně do aplikace přidat následující ladicí kód, který vám pomůže ověřit, že jsou prostředky správně nakonfigurované. Vypíše všechny známé prostředky vložené do daného sestavení do oblasti Chyby , aby bylo možné ladit problémy s načítáním prostředků.

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

Shrnutí

Tento článek ukazuje několik jednoduchých operací se soubory pro ukládání a načítání textu na zařízení a načítání vložených prostředků. S .NET Standard 2.0 je možné sdílet přístupový kód souboru v knihovnách .NET Standard.