Zpracování souborů v Xamarin.Forms
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:
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. Následující snímek obrazovky ukazuje text vykreslený v ovládacím Label
prvku:
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;
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.