Dateisystem Zugriff in xamarin. IOSFile system access in Xamarin.iOS

Beispiel herunterladen Das Beispiel herunterladenDownload Sample Download the sample

Sie können xamarin. IOS und die System.IO Klassen in der .net-Basisklassen Bibliothek (BCL) verwenden, um auf das IOS-Dateisystem zuzugreifen.You can use Xamarin.iOS and the System.IO classes in the .NET Base Class Library (BCL) to access the iOS file system. Mithilfe der File-Klasse können Sie Dateien erstellen, löschen und lesen, und mit der Directory-Klasse können Sie den Inhalt der Verzeichnisse erstellen, löschen oder auflisten.The File class lets you create, delete, and read files, and the Directory class allows you to create, delete, or enumerate the contents of directories. Sie können auch Stream Unterklassen verwenden, die ein höheres Maß an Kontrolle über Datei Vorgänge bereitstellen können (z. b. Komprimierung oder Positions Suche innerhalb einer Datei).You can also use Stream subclasses, which can provide a greater degree of control over file operations (such as compression or position search within a file).

IOS erzwingt einige Einschränkungen, die eine Anwendung mit dem Dateisystem ausführen kann, um die Sicherheit der Anwendungsdaten zu erhalten und Benutzer vor bösartigen apps zu schützen.iOS imposes some restrictions on what an application can do with the file system to preserve the security of an application’s data, and to protect users from malignant apps. Diese Einschränkungen sind Teil der Anwendungs Sandbox – ein Satz von Regeln, die den Zugriff einer Anwendung auf Dateien, Einstellungen, Netzwerkressourcen, Hardware usw. einschränken. Eine Anwendung ist auf das Lesen und Schreiben von Dateien innerhalb Ihres Basisverzeichnisses (installierter Speicherort) beschränkt. der Zugriff auf die Dateien einer anderen Anwendung ist nicht möglich.These restrictions are part of the Application Sandbox – a set of rules that limits an application’s access to files, preferences, network resources, hardware, etc. An application is limited to reading and writing files within its home directory (installed location); it cannot access another application’s files.

IOS verfügt auch über einige Dateisystem spezifische Features: bestimmte Verzeichnisse erfordern eine besondere Behandlung in Bezug auf Sicherungen und Upgrades, und Anwendungen können auch Dateien untereinander und die Datei -app (seit IOS 11) und über iTunes gemeinsam nutzen.iOS also has some file system-specific features: certain directories require special treatment with respect to backups and upgrades, and applications can also share files with each other and the Files app (since iOS 11), and via iTunes.

In diesem Artikel werden die Features und Einschränkungen des IOS-Dateisystems beschrieben. es enthält eine Beispielanwendung, die veranschaulicht, wie mit xamarin. IOS einige einfache Dateisystem Vorgänge ausgeführt werden:This article discusses the features and restrictions of the iOS file system, and includes a sample application that demonstrates how to use Xamarin.iOS to execute some simple file system operations:

Ein Beispiel für IOS, das einige einfache Dateisystem Vorgänge ausführtA sample of iOS executing some simple file system operations

Allgemeiner DateizugriffGeneral file access

Xamarin. IOS ermöglicht die Verwendung der .net- System.IO Klassen für Dateisystem Vorgänge unter IOS.Xamarin.iOS allows you to use the .NET System.IO classes for file system operations on iOS.

Die folgenden Code Ausschnitte veranschaulichen einige gängige Datei Vorgänge.The following code snippets illustrate some common file operations. Sie finden Sie unten in der SampleCode.cs -Datei in der Beispielanwendung für diesen Artikel.You’ll find them all below in the SampleCode.cs file, in the sample application for this article.

Arbeiten mit VerzeichnissenWorking with directories

Dieser Code listet die Unterverzeichnisse im aktuellen Verzeichnis auf (angegeben durch den Parameter "./"), wobei es sich um den Speicherort der ausführbaren Datei der Anwendung handelt.This code enumerates the subdirectories in the current directory (specified by the "./" parameter), which is the location of your application executable. Bei der Ausgabe handelt es sich um eine Liste aller Dateien und Ordner, die mit Ihrer Anwendung bereitgestellt werden (im Konsolenfenster angezeigt, während Sie Debuggen).Your output will be a list of all the files and folders that are deployed with your application (displayed in the console window while you are debugging).

var directories = Directory.EnumerateDirectories("./");
foreach (var directory in directories) {
      Console.WriteLine(directory);
}

Lesen von DateienReading files

Um eine Textdatei zu lesen, benötigen Sie nur eine einzige Codezeile.To read a text file, you only need a single line of code. In diesem Beispiel wird der Inhalt einer Textdatei im Fenster "Anwendungs Ausgabe" angezeigt.This example will display the contents of a text file in the Application Output window.

var text = File.ReadAllText("TestData/ReadMe.txt");
Console.WriteLine(text);

XML-SerialisierungXML serialization

Obwohl die Arbeit mit dem gesamten System.Xml Namespace über den Rahmen dieses Artikels hinausgeht, können Sie ein XML-Dokument problemlos aus dem Dateisystem deserialisieren, indem Sie einen StreamReader wie diesen Code Ausschnitt verwenden:Although working with the complete System.Xml namespace is beyond the scope of this article, you can easily deserialize an XML document from the file system by using a StreamReader like this code snippet:

using (TextReader reader = new StreamReader("./TestData/test.xml")) {
      XmlSerializer serializer = new XmlSerializer(typeof(MyObject));
      var xml = (MyObject)serializer.Deserialize(reader);
}

Weitere Informationen finden Sie in der Dokumentation zu System.Xml und Serialisierung.For more information, see the documentation for System.Xml and serialization. Weitere Informationen finden Sie in der xamarin. IOS-Dokumentation auf dem Linker – oft müssen Sie das-Attribut zu Klassen hinzufügen, die [Preserve] Sie serialisieren möchten.See the Xamarin.iOS documentation on the linker – often you will need to add the [Preserve] attribute to classes you intend to serialize.

Erstellen von Dateien und VerzeichnissenCreating files and directories

Dieses Beispiel zeigt, wie Sie die- Environment Klasse verwenden, um auf den Ordner "Dokumente" zuzugreifen, in dem Dateien und Verzeichnisse erstellt werden können.This sample shows how to use the Environment class to access the Documents folder where we can create files and directories.

var documents =
 Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments); 
var filename = Path.Combine (documents, "Write.txt");
File.WriteAllText(filename, "Write this text into a file");

Das Erstellen eines Verzeichnisses ist ein ähnlicher Prozess:Creating a directory is a similar process:

var documents =
 Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var directoryname = Path.Combine (documents, "NewDirectory");
Directory.CreateDirectory(directoryname);

Weitere Informationen finden Sie in der System.IO-API-Referenz.For more information see the System.IO API reference.

Serialisieren von JSONSerializing JSON

JSON.net ist ein leistungsfähiges JSON-Framework, das mit xamarin. IOS funktioniert und für nuget verfügbar ist.Json.NET is a high-performance JSON framework that works with Xamarin.iOS and is available on NuGet. Fügen Sie dem Anwendungsprojekt das nuget-Paket hinzu, indem Sie nuget in Visual Studio für Mac hinzufügen :Add the NuGet package to your application project, using Add NuGet in Visual Studio for Mac:

Hinzufügen des nuget-Pakets zum AnwendungsprojektAdding the NuGet package to the applications project

Fügen Sie als nächstes eine Klasse hinzu, die als Datenmodell für die Serialisierung/Deserialisierung fungiert (in diesem Fall Account.cs ):Next, add a class to act as the data model for serialization/deserialization (in this case Account.cs):

using System;
using System.Collections.Generic;
using Foundation; // for Preserve attribute, which helps serialization with Linking enabled

namespace FileSystem
{
    [Preserve]
    public class Account
    {
        public string Email { get; set; }
        public bool Active { get; set; }
        public DateTime CreatedDate { get; set; }
        public List<string> Roles { get; set; }

        public Account() {
        }
    }
}

Erstellen Sie abschließend eine Instanz der Account -Klasse, serialisieren Sie Sie in JSON-Daten, und schreiben Sie Sie in eine Datei:Finally, create an instance of the Account class, serialize it to json data and write it to a file:

// Create a new record
var account = new Account(){
    Email = "monkey@xamarin.com",
    Active = true,
    CreatedDate = new DateTime(2015, 5, 27, 0, 0, 0, DateTimeKind.Utc),
    Roles = new List<string> {"User", "Admin"}
};

// Serialize object
var json = JsonConvert.SerializeObject(account, Newtonsoft.Json.Formatting.Indented);

// Save to file
var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine (documents, "account.json");
File.WriteAllText(filename, json);

Weitere Informationen zum Arbeiten mit JSON-Daten in einer .NET-Anwendung finden Sie in der Dokumentationzu JSON. net.For more information about working with json data in a .NET application, see Json.NET's documentation.

Besondere ÜberlegungenSpecial considerations

Trotz der Ähnlichkeiten zwischen xamarin. IOS-und .NET-Datei Vorgängen unterscheiden sich IOS und xamarin. IOS in einigen wichtigen Punkten von .net.Despite the similarities between Xamarin.iOS and .NET file operations, iOS and Xamarin.iOS differ from .NET in some important ways.

Zugreifen auf Projektdateien zur LaufzeitMaking project files accessible at runtime

Wenn Sie dem Projekt eine Datei hinzufügen, wird diese standardmäßig nicht in die endgültige Assembly eingeschlossen und ist daher für Ihre Anwendung nicht verfügbar.By default, if you add a file to your project, it won’t be included in the final assembly, and therefore won’t be available to your application. Wenn Sie eine Datei in die Assembly einschließen möchten, müssen Sie Sie mit einer speziellen Buildaktion markieren, die als Inhalt bezeichnet wird.In order to include a file in the assembly, you must mark it with a special build action, called Content.

Um eine Datei für die Einbindung zu markieren, klicken Sie mit der rechten Maustaste auf die Datei (en), und wählen Sie in Visual Studio für Mac **buildaktionsinhalt > ** .To mark a file for inclusion, right-click on the file(s) and choose Build Action > Content in Visual Studio for Mac. Sie können auch die Buildaktion auf der Eigenschaften Seite der Datei ändern.You can also change the Build Action in the file’s Properties sheet.

Groß- und KleinschreibungCase sensitivity

Es ist wichtig zu wissen, dass beim IOS-Dateisystem die Groß-/Kleinschreibungbeachtet wird.It’s important to understand that the iOS file system is case-sensitive. Unterscheidung nach Groß-/Kleinschreibung bedeutet, dass die Datei-und Verzeichnisnamen exakt übereinstimmen müssen – README.txt und readme.txt als andere Dateinamen angesehen werden.Case-sensitivity means that your file and directory names must match exactly – README.txt and readme.txt would be considered different filenames.

Dies könnte für .NET-Entwickler verwirrend sein, die mit dem Windows-Dateisystem vertraut sind, bei dem die Groß-/Kleinschreibung nicht beachtet wird – Dateien, Dateienund Dateien würden alle auf dasselbe Verzeichnis verweisen.This could be confusing for .NET developers who are more familiar with the Windows file system, which is case insensitiveFiles, FILES, and files would all refer to the same directory.

Warnung

Beim IOS-Simulator wird die Groß-/Kleinschreibung nicht beachtet.The iOS Simulator is NOT case-sensitive. Wenn die Schreibweise des Datei namens zwischen der Datei selbst und den verweisen darauf im Code abweicht, kann Ihr Code im Simulator weiterhin verwendet werden, schlägt jedoch auf einem echten Gerät fehl.If your filename casing differs between the file itself and the references to it in code, your code might still work in the simulator but it will fail on a real device. Dies ist einer der Gründe, warum es wichtig ist, früh und häufig während der IOS-Entwicklung auf einem tatsächlichen Gerät bereitzustellen und zu testen.This is one of the reasons why it’s important to deploy and test on an actual device early and often during iOS development.

Pfad TrennzeichenPath separator

IOS verwendet den Schrägstrich "/" als Pfad Trennzeichen (unterscheidet sich von Windows, der den umgekehrten Schrägstrich "" verwendet).iOS uses the forward slash ‘/’as the path separator (which is different from Windows, which uses the backslash ‘\’).

Aufgrund dieses verwirrenden Unterschieds empfiehlt es sich, die-Methode zu verwenden System.IO.Path.Combine , die sich für die aktuelle Plattform anpasst, anstatt ein bestimmtes Pfad Trennzeichen hart zu codieren.Because of this confusing difference, it’s good practice to use the System.IO.Path.Combine method, which adjusts for the current platform, rather than hardcode a particular path separator. Dies ist ein einfacher Schritt, der Ihren Code besser auf andere Plattformen portierbar macht.This is a simple step that makes your code more portable to other platforms.

Anwendungs SandboxApplication sandbox

Der Zugriff auf das Dateisystem (und andere Ressourcen, z. b. die Netzwerk-und Hardware Features) Ihrer Anwendung ist aus Sicherheitsgründen eingeschränkt.Your application’s access to the file system (and other resources such as the network and hardware features) is limited for security reasons. Diese Einschränkung wird als Anwendungs Sandboxbezeichnet.This restriction is known as the Application Sandbox. Im Hinblick auf das Dateisystem ist die Anwendung auf das Erstellen und Löschen von Dateien und Verzeichnissen in Ihrem Basisverzeichnis beschränkt.In terms of the file system, your application is limited to creating and deleting files and directories in its home directory.

Das Basisverzeichnis ist ein eindeutiger Speicherort im Dateisystem, in dem Ihre Anwendung und alle Ihre Daten gespeichert werden.The home directory is a unique location in the file system where your application and all its data are stored. Der Speicherort des Basisverzeichnisses für Ihre Anwendung kann nicht ausgewählt (oder geändert) werden. IOS und xamarin. IOS stellen jedoch Eigenschaften und Methoden bereit, um die Dateien und Verzeichnisse in zu verwalten.You cannot choose (or change) the location of the home directory for your application; however iOS and Xamarin.iOS provide properties and methods to manage the files and directories inside.

Das AnwendungspaketThe application bundle

Das Anwendungspaket ist der Ordner, der Ihre Anwendung enthält.The Application Bundle is the folder that contains your application. Sie wird von anderen Ordnern unterschieden, indem dem Verzeichnisnamen das Suffix. app hinzugefügt wird.It is distinguished from other folders by having the .app suffix added to the directory name. Ihr Anwendungspaket enthält die ausführbare Datei und alle Inhalte (Dateien, Bilder usw.), die für Ihr Projekt erforderlich sind.Your application bundle contains your executable file and all the content (files, images, etc.) necessary for your project.

Wenn Sie in Mac OS zu Ihrem Anwendungspaket navigieren, wird es mit einem anderen Symbol angezeigt als in anderen Verzeichnissen (und das Suffix " . app " ist ausgeblendet). Es handelt sich jedoch lediglich um ein reguläres Verzeichnis, das vom Betriebssystem unterschiedlich angezeigt wird.When you browse to your application bundle in Mac OS, it appears with a different icon than you see in other directories (and the .app suffix is hidden); however, it’s just a regular directory that the operating system is displaying differently.

Um das Anwendungspaket für den Beispielcode anzuzeigen, klicken Sie in Visual Studio für Mac mit der rechten Maustaste auf das Projekt, und wählen Sie in Finderanzeigen aus.To view the application bundle for the sample code, right-click on the project in Visual Studio for Mac and select Reveal in Finder. Navigieren Sie dann zum Verzeichnis " bin/ Verzeichnis", in dem Sie ein Anwendungssymbol finden sollten (ähnlich wie im nachfolgenden Screenshot).Then navigate to the bin/ directory where you should find an application icon (similar to the screenshot below).

Navigieren Sie durch das bin-Verzeichnis, um ein Anwendungssymbol zu finden, das diesem Screenshot ähnelt.

Klicken Sie mit der rechten Maustaste auf dieses Symbol, und wählen Sie Paket Inhalt anzeigen aus, um den Inhalt des Anwendungspaket Verzeichnisses zu durchsuchen.Right-click on this icon and choose Show Package Contents to browse the contents of the Application Bundle directory. Der Inhalt wird genau wie der Inhalt eines regulären Verzeichnisses angezeigt, wie hier gezeigt:The contents appear just like the contents of a regular directory, as shown here:

Der Inhalt des App BundleThe contents of the app bundle

Das Anwendungspaket wird während des Tests auf dem Simulator oder auf Ihrem Gerät installiert, und letztendlich wird es an Apple zur Einbindung in den App Store übermittelt.The application bundle is what’s installed on the simulator or on your device during testing, and ultimately it is what’s submitted to Apple for inclusion in the App Store.

Anwendungs VerzeichnisseApplication directories

Wenn die Anwendung auf einem Gerät installiert ist, erstellt das Betriebssystem ein Basisverzeichnis für Ihre Anwendung und erstellt eine Reihe von Verzeichnissen im Stammverzeichnis der Anwendung, die zur Verwendung verfügbar sind.When your application is installed on a device, the operating system creates a home directory for your application, and creates a number of directories within the application root directory that are available for use. Seit IOS 8 befinden sich die vom Benutzer zugänglichen Verzeichnisse nicht innerhalb des Anwendungs Stamms, sodass Sie die Pfade für das Anwendungspaket nicht aus den Benutzerverzeichnissen ableiten können (oder umgekehrt).Since iOS 8, the user-accessible directories are NOT located within the application root, so you can't derive the paths for the application bundle from the user directories, or vice versa.

Diese Verzeichnisse, wie Sie Ihren Pfad ermitteln, und ihre Zwecke sind unten aufgeführt:These directories, how to determine their path, and their purposes are listed below:

 

VerzeichnisDirectory BESCHREIBUNGDescription
[ApplicationName]. app/[ApplicationName].app/ In ios 7 und früherenVersionen ist dies das ApplicationBundle Verzeichnis, in dem die ausführbare Datei der Anwendung gespeichert ist.In iOS 7 and earlier, this is the ApplicationBundle directory where your application executable is stored. Die Verzeichnisstruktur, die Sie in Ihrer APP erstellen, ist in diesem Verzeichnis vorhanden (z. b. Bilder und andere Dateitypen, die Sie als Ressourcen in Ihrem Visual Studio für Mac Projekt gekennzeichnet haben).The directory structure that you create in your app exists in this directory (for example, images and other file types that you’ve marked as Resources in your Visual Studio for Mac project).

Wenn Sie auf die Inhalts Dateien innerhalb des Anwendungspakets zugreifen müssen, ist der Pfad zu diesem Verzeichnis über die- NSBundle.MainBundle.BundlePath Eigenschaft verfügbar.If you need to access the content files inside your Application Bundle, the path to this directory is available via the NSBundle.MainBundle.BundlePath property.
DokumentenDocuments/ Verwenden Sie dieses Verzeichnis zum Speichern von Benutzer Dokumenten und Anwendungs Datendateien.Use this directory to store user documents and application data files.

Der Inhalt dieses Verzeichnisses kann dem Benutzer über die iTunes-Dateifreigabe zur Verfügung gestellt werden (obwohl dies standardmäßig deaktiviert ist).The contents of this directory can be made available to the user through iTunes file sharing (although this is disabled by default). Fügen Sie UIFileSharingEnabled der Datei "Info. plist" einen booleschen Schlüssel hinzu, damit Benutzer auf diese Dateien zugreifen können.Add a UIFileSharingEnabled Boolean key to the Info.plist file to allow users to access these files.

Auch wenn eine Anwendung die Dateifreigabe nicht sofort aktiviert, sollten Sie verhindern, dass Dateien, die für die Benutzer in diesem Verzeichnis ausgeblendet werden sollen (z. b. Datenbankdateien), nicht mehr zur Verfügung stehen.Even if an application doesn’t immediately enable file sharing, you should avoid placing files that should be hidden from your users in this directory (such as database files, unless you intend to share them). Solange sensible Dateien ausgeblendet bleiben, werden diese Dateien nicht verfügbar gemacht (und möglicherweise von iTunes verschoben, geändert oder gelöscht), wenn die Dateifreigabe in einer zukünftigen Version aktiviert ist.As long as sensitive files remain hidden, these files will not be exposed (and potentially moved, modified, or deleted by iTunes) if file sharing is enabled in a future version.

Sie können die- Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments) Methode verwenden, um den Pfad zum Verzeichnis "Dokumente" für Ihre Anwendung zu erhalten.You can use the Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments) method to get the path to the Documents directory for your application.

Der Inhalt dieses Verzeichnisses wird von iTunes gesichert.The contents of this directory are backed up by iTunes.
FernLibrary/ Das Bibliotheksverzeichnis ist ein guter Ort, um Dateien zu speichern, die nicht direkt vom Benutzer erstellt werden, z. b. Datenbanken oder andere von der Anwendung generierte Dateien.The Library directory is a good place to store files that are not created directly by the user, such as databases or other application-generated files. Der Inhalt dieses Verzeichnisses wird dem Benutzer nie über iTunes zugänglich gemacht.The contents of this directory are never exposed to the user via iTunes.

Sie können eigene Unterverzeichnisse in der Bibliothek erstellen. Es gibt jedoch bereits einige vom System erstellte Verzeichnisse, die Sie kennen sollten, einschließlich Einstellungen und Caches.You can create your own subdirectories in Library; however, there are already some system-created directories here that you should be aware of, including Preferences and Caches.

Der Inhalt dieses Verzeichnisses (mit Ausnahme des Unterverzeichnisses Caches) wird von iTunes gesichert.The contents of this directory (except for the Caches subdirectory) are backed up by iTunes. Benutzerdefinierte Verzeichnisse, die Sie in der Bibliothek erstellen, werden gesichert.Custom directories that you create in Library will be backed up.
Bibliothek/Einstellungen/Library/Preferences/ Anwendungsspezifische Einstellungsdateien werden in diesem Verzeichnis gespeichert.Application-specific preference files are stored in this directory. Erstellen Sie diese Dateien nicht direkt.Do not create these files directly. Verwenden Sie stattdessen die- NSUserDefaults Klasse.Instead, use the NSUserDefaults class.

Der Inhalt dieses Verzeichnisses wird von iTunes gesichert.The contents of this directory are backed up by iTunes.
Bibliothek/Caches/Library/Caches/ Das Caches-Verzeichnis ist ein guter Ort zum Speichern von Datendateien, die Ihre Anwendung unterstützen, aber problemlos neu erstellt werden können.The Caches directory is a good place to store data files that can help your application run, but that can be easily re-created. Die Anwendung sollte diese Dateien nach Bedarf erstellen und löschen und diese Dateien bei Bedarf neu erstellen können.The application should create and delete these files as needed and be able to re-create these files if necessary. IOS 5 kann diese Dateien auch löschen (in Situationen mit geringem Speicherplatz), dies ist jedoch nicht der Fall, während die Anwendung ausgeführt wird.iOS 5 may also delete these files (under low storage situations), however it will not do so while the application is running.

Der Inhalt dieses Verzeichnisses wird nicht von iTunes gesichert. Dies bedeutet, dass Sie nicht vorhanden sind, wenn der Benutzer ein Gerät wiederherstellt, und Sie sind möglicherweise nicht vorhanden, nachdem eine aktualisierte Version der Anwendung installiert wurde.The contents of this directory are NOT backed up by iTunes, which means they will not be present if the user restores a device, and they may not be present after an updated version of your application is installed.

Wenn Ihre Anwendung beispielsweise keine Verbindung mit dem Netzwerk herstellen kann, können Sie das Caches-Verzeichnis verwenden, um Daten oder Dateien zu speichern, um ein gutes Offline Verhalten zu gewährleisten.For instance, in case your application can't connect to the network, you might use the Caches directory to store data or files to provide a good offline experience. Diese Daten können von der Anwendung beim Warten auf Netzwerk Antworten schnell gespeichert und abgerufen werden. Sie müssen jedoch nicht gesichert werden und können nach einem Wiederherstellungs-oder Versions Update problemlos wieder hergestellt oder neu erstellt werden.The application can save and retrieve this data quickly while waiting for network responses, but it doesn’t need to be backed up and can easily be recovered or re-created after a restore or version update.
tmptmp/ Anwendungen können temporäre Dateien speichern, die nur für einen kurzen Zeitraum in diesem Verzeichnis benötigt werden.Applications can store temporary files that are only needed for a short period in this directory. Um Speicherplatz zu sparen, sollten Dateien gelöscht werden, wenn Sie nicht mehr benötigt werden.To conserve space, files should be deleted when they are no longer required. Das Betriebssystem kann auch Dateien aus diesem Verzeichnis löschen, wenn eine Anwendung nicht ausgeführt wird.The operating system may also delete files from this directory when an application is not running.

Der Inhalt dieses Verzeichnisses wird nicht von iTunes gesichert.The contents of this directory are NOT backed up by iTunes.

Beispielsweise kann das tmp-Verzeichnis zum Speichern temporärer Dateien verwendet werden, die für die Anzeige für den Benutzer heruntergeladen werden (z. b. Twitter-Avatare oder e-Mail-Anlagen). Diese können jedoch gelöscht werden, sobald Sie angezeigt werden (und erneut heruntergeladen werden, wenn Sie in Zukunft benötigt werden).For example, the tmp directory might be used to store temporary files that are downloaded for display to the user (such as Twitter avatars or email attachments), but that could be deleted once they've been viewed (and downloaded again if they are required in the future).

Dieser Screenshot zeigt die Verzeichnisstruktur in einem Finder-Fenster:This screenshot shows the directory structure in a Finder window:

Dieser Screenshot zeigt die Verzeichnisstruktur in einem Finder-FensterThis screenshot shows the directory structure in a Finder window

Programm gesteuertes zugreifen auf andere VerzeichnisseAccessing other directories programmatically

In den vorherigen Verzeichnis-und Datei Beispielen wurde auf das Documents Verzeichnis zugegriffen.The earlier directory and file examples accessed the Documents directory. Um in ein anderes Verzeichnis zu schreiben, müssen Sie einen Pfad mit der Syntax ".." erstellen, wie hier gezeigt:To write to another directory, you must construct a path using the ".." syntax as shown here:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var library = Path.Combine (documents, "..", "Library");
var filename = Path.Combine (library, "WriteToLibrary.txt");
File.WriteAllText(filename, "Write this text into a file in Library");

Das Erstellen eines Verzeichnisses ist ähnlich:Creating a directory is similar:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var library = Path.Combine (documents, "..", "Library");
var directoryname = Path.Combine (library, "NewLibraryDirectory");
Directory.CreateDirectory(directoryname);

Pfade zu den Caches tmp Verzeichnissen und können wie folgt erstellt werden:Paths to the Caches and tmp directories can be constructed like this:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var cache = Path.Combine (documents, "..", "Library", "Caches");
var tmp = Path.Combine (documents, "..", "tmp");

Freigabe mit der App "Dateien"Sharing with the Files app

IOS 11 hat die Datei-App eingeführt : einen Dateibrowser für IOS, mit dem Benutzer Ihre Dateien in icloud anzeigen und mit ihr interagieren und auch von einer beliebigen Anwendung, die Sie unterstützt, gespeichert werden können.iOS 11 introduced the Files app - a file browser for iOS that allows the user to see and interact with their files in iCloud and also stored by any application that supports it. Damit der Benutzer direkt auf Dateien in der App zugreifen kann, erstellen Sie einen neuen booleschen Schlüssel in der Info. plist -Datei, LSSupportsOpeningDocumentsInPlace und legen Sie ihn wie folgt auf fest true :To allow the user to directly access files in your app, create a new boolean key in the Info.plist file LSSupportsOpeningDocumentsInPlace and set it to true, as here:

Lssupportsopeningdocumentsinplace in "Info. plist" festlegen

Das Verzeichnis " Dokumente " der APP steht nun in der Datei -App zum Durchsuchen zur Verfügung.The app's Documents directory will now be available for browsing in the Files app. Navigieren Sie in der Datei -APP auf meinem iPhone zu, und jede APP mit freigegebenen Dateien wird angezeigt.In the Files app, navigate to On My iPhone and each app with shared files will be visible. Die folgenden Screenshots zeigen, wie die File System-Beispiel-App aussieht:The screenshots below show what the FileSystem sample app looks like:

IOS 11-Dateien-App Meine iPhone-Dateien durchsuchen Beispiel-APP-Dateien

Freigeben von Dateien für den Benutzer über iTunesSharing files with the user through iTunes

Benutzer können auf die Dateien im Verzeichnis "Dokumente" Ihrer Anwendung zugreifen Info.plist , indem Sie eine Anwendung, die den iTunes Sharing ()-Eintrag unterstützt UIFileSharingEnabled , in der Quell Ansicht bearbeiten und erstellen, wie hier gezeigt:Users can access the files in your application’s Documents directory by editing Info.plist and creating an Application that supports iTunes sharing (UIFileSharingEnabled) entry in the Source view, as shown here:

Das Hinzufügen der Anwendung unterstützt die iTunes-Freigabe EigenschaftAdding the Application supports iTunes sharing property

Diese Dateien können in iTunes aufgerufen werden, wenn das Gerät verbunden ist und der Benutzer die Apps Registerkarte auswählt. Der folgende Screenshot zeigt z. b. die Dateien in der ausgewählten APP, die über iTunes freigegeben wurde:These files can be accessed in iTunes when the device is connected and the user chooses the Apps tab. For example, the following screenshot shows the files in selected app shared via iTunes:

Dieser Screenshot zeigt die Dateien in ausgewählter APP, die über iTunes freigegeben wurde.This screenshot shows the files in selected app shared via iTunes

Benutzer können nur über iTunes auf die Elemente der obersten Ebene in diesem Verzeichnis zugreifen.Users can only access the top-level items in this directory via iTunes. Die Inhalte von Unterverzeichnissen können nicht angezeigt werden (Sie können Sie jedoch auf Ihren Computer kopieren oder löschen).They cannot see the contents of any subdirectories (although they can copy them to their computer or delete them). Beispielsweise können mit goodreader PDF-und EPUB-Dateien für die Anwendung freigegeben werden, damit Benutzer Sie auf Ihren IOS-Geräten lesen können.For example, with GoodReader, PDF and EPUB files can be shared with the application so that users can read them on their iOS devices.

Benutzer, die den Inhalt Ihres Ordners "Dokumente" ändern, können Probleme verursachen, wenn Sie nicht vorsichtig sind.Users who modify the contents of their Documents folder can cause problems if they’re not careful. Die Anwendung sollte dies berücksichtigen und sich gegen zerstörerische Updates des Ordners "Dokumente" widerstandsfähig machen.Your application should take this into consideration and be resilient to destructive updates of the Documents folder.

Der Beispielcode für diesen Artikel erstellt sowohl eine Datei als auch einen Ordner im Ordner "Documents" (in SampleCode.cs) und aktiviert die Dateifreigabe in der Datei " Info. plist ".The sample code for this article creates both a file and a folder in the Documents folder (in SampleCode.cs) and enables file sharing in the Info.plist file. Dieser Screenshot zeigt, wie diese in iTunes angezeigt werden:This screenshot shows how these appear in iTunes:

Dieser Screenshot zeigt, wie die Dateien in iTunes angezeigt werden.This screenshot shows how the files appear in iTunes

Informationen dazu, wie Sie Symbole für die Anwendung und benutzerdefinierte Dokumenttypen festlegen, die Sie erstellen, finden Sie im Artikel Working with Images (Arbeiten mit Images ).Refer to the Working with Images article for information about how to set icons for the application and for any custom document types you create.

Wenn der UIFileSharingEnabled Schlüssel falsch oder nicht vorhanden ist, wird die Dateifreigabe standardmäßig deaktiviert, und die Benutzer können nicht mit Ihrem Verzeichnis "Dokumente" interagieren.If the UIFileSharingEnabled key is false or not present, then file sharing is, by default, disabled, and users will not be able to interact with your Documents directory.

Sichern und WiederherstellenBackup and restore

Wenn ein Gerät von iTunes gesichert wird, werden alle Verzeichnisse, die im Basisverzeichnis Ihrer Anwendung erstellt werden, mit Ausnahme der folgenden Verzeichnisse gespeichert:When a device is backed up by iTunes, all the directories created in your application’s home directory will be saved except the following directories:

  • [ApplicationName]. app – schreiben Sie in dieses Verzeichnis nicht, da es signiert ist und daher nach der Installation unverändert bleiben muss.[ApplicationName].app – Don't write to this directory, since it’s signed and so must remain unchanged after installation. Sie enthält möglicherweise Ressourcen, auf die Sie aus Ihrem Code zugreifen, aber Sie benötigen keine Sicherung, da Sie durch erneutes herunterladen der APP wieder hergestellt werden.It may contain resources that you access from your code, but they do not require backup since they would be restored by re-downloading the app.
  • Bibliothek/Caches – das Cache Verzeichnis ist für Arbeitsdateien vorgesehen, die nicht gesichert werden müssen.Library/Caches – The cache directory is intended for working files that do not need to be backed up.
  • tmp – dieses Verzeichnis wird für temporäre Dateien verwendet, die erstellt und gelöscht werden, wenn Sie nicht mehr benötigt werden, oder für Dateien, die von IOS gelöscht werden, wenn Speicherplatz benötigt wird.tmp – This directory is used for temporary files that are created and deleted when no longer needed, or for files that iOS deletes when it needs space.

Das Sichern einer großen Datenmenge kann einige Zeit in Anspruch nehmen.Backing up a large amount of data can take a long time. Wenn Sie festlegen, dass Sie ein bestimmtes Dokument oder Daten sichern möchten, sollte Ihre Anwendung entweder die Ordner "Dokumente" und "Bibliothek" verwenden.If you decide you need to back up any particular document or data, your application should use either use the Documents and Library folders. Bei vorübergehenden Daten oder Dateien, die problemlos aus dem Netzwerk abgerufen werden können, verwenden Sie entweder die Caches oder das tmp-Verzeichnis.For transient data or files that can be easily retrieved from the network, use either the Caches or the tmp directory.

Hinweis

IOS wird das Dateisystem bereinigen, wenn der Speicherplatz auf einem Gerät deutlich niedrig ist.iOS will ‘clean’ the filesystem when a device runs critically low on disk space. Bei diesem Vorgang werden alle Dateien aus den Bibliotheken/Caches und dem tmp-Ordner von Anwendungen entfernt, die derzeit nicht ausgeführt werden.This process will remove all files from the Library/Caches and tmp folder of applications that are not currently running.

Einhaltung der Einschränkungen für IOS 5-icloud-SicherungenComplying with iOS 5 iCloud backup restrictions

Hinweis

Obwohl diese Richtlinie erstmals mit IOS 5 eingeführt wurde (was vor längerer Zeit scheint), ist die Anleitung für apps noch heute relevant.Although this policy was first introduced with iOS 5 (which seems like a long time ago) the guidance is still relevant to apps today.

Apple hat eine icloud-Sicherungs Funktion mit IOS 5 eingeführt.Apple introduced iCloud Backup functionality with iOS 5. Wenn die icloud-Sicherung aktiviert ist, werden alle Dateien im Stammverzeichnis Ihrer Anwendung (ausgenommen Verzeichnisse, die normalerweise nicht gesichert werden, z. b. die APP Bundle, Caches und tmp ) auf icloud-Servern gesichert.When iCloud Backup is enabled, all the files in your application’s home directory (excluding directories that are not normally backed up, e.g., the app bundle, Caches, and tmp) are backed-up to iCloud servers. Diese Funktion bietet dem Benutzer eine komplette Sicherung für den Fall, dass das Gerät verloren geht, gestohlen wird oder beschädigt ist.This feature provides the user with a complete backup in case their device is lost, stolen, or damaged.

Da icloud den einzelnen Benutzern nur 5 GB freien Speicherplatz zur Verfügung stellt, damit die Bandbreite unnötig vermieden wird, erwartet Apple, dass Anwendungen nur grundlegende benutzergenerierte Daten sichern.Because iCloud only provides 5 Gb of free space to each user and to avoid unnecessarily using bandwidth, Apple expects applications to only backup essential user-generated data. Zur Einhaltung der IOS-Daten Speicherungs Richtlinien sollten Sie die Menge der zu sichernden Daten einschränken, indem Sie die folgenden Elemente einhalten:To comply with the iOS Data Storage Guidelines, you should limit the amount of data that gets backed up by adhering to the following items:

  • Speichern Sie nur benutzergenerierte Daten oder Daten, die anderweitig nicht neu erstellt werden können, im Verzeichnis "Dokumente" (das gesichert ist).Only store user-generated data, or data that cannot otherwise be re-created, in the Documents directory (which is backed-up).
  • Speichern Sie alle anderen Daten, die einfach neu erstellt oder heruntergeladen werden können Library/Caches , oder tmp (die nicht gesichert und möglicherweise "bereinigt" werden).Store any other data that can easily be re-created or re-downloaded in Library/Caches or tmp (which is not backed-up, and could be ‘cleaned’).
  • Wenn Sie über Dateien verfügen, die ggf. für den Library/Caches Ordner oder geeignet sind tmp , Sie aber nicht bereinigt werden sollen, speichern Sie Sie an einer anderen Stelle (z. b. Library/YourData ), und wenden Sie das Attribut "nicht sichern" an, um zu verhindern, dass die Dateien die icloud-Sicherungs Bandbreite und den Speicherplatz verbrauchen.If you have files that might be appropriate for the Library/Caches or tmp folder but you do not want to be ‘cleaned’ out, store them elsewhere (such as Library/YourData) and apply the ‘do not back up’ attribute to prevent the files from using up iCloud Backup bandwidth and storage space. Diese Daten verbraucht weiterhin Speicherplatz auf dem Gerät, sodass Sie Sie nach Möglichkeit sorgfältig verwalten und löschen sollten.This data still uses up space on the device, so you should manage it carefully and delete it when possible.

Das ' do not Backup '-Attribut wird mithilfe der- NSFileManager Klasse festgelegt.The ‘do not back up’ attribute is set using the NSFileManager class. Stellen Sie sicher, dass Ihre Klasse ist using Foundation und wie folgt aufruft SetSkipBackupAttribute :Ensure your class is using Foundation and call SetSkipBackupAttribute like this:

var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
var filename = Path.Combine (documents, "LocalOnly.txt");
File.WriteAllText(filename, "This file will never get backed-up. It would need to be re-created after a restore or re-install");
NSFileManager.SetSkipBackupAttribute (filename, true); // backup will be skipped for this file

Wenn SetSkipBackupAttribute ist true , wird die Datei unabhängig von dem Verzeichnis, in dem Sie gespeichert ist, nicht gesichert (auch das Documents Verzeichnis).When SetSkipBackupAttribute is true the file will not be backed-up, regardless of the directory it is stored in (even the Documents directory). Sie können das-Attribut mithilfe der- GetSkipBackupAttribute Methode Abfragen, und Sie können es zurücksetzen, indem Sie die- SetSkipBackupAttribute Methode mit wie folgt aufrufen false :You can query the attribute using the GetSkipBackupAttribute method, and you can reset it by calling the SetSkipBackupAttribute method with false, like this:

NSFileManager.SetSkipBackupAttribute (filename, false); // file will be backed-up

Freigeben von Daten zwischen IOS-apps und App-ErweiterungenSharing data between iOS apps and app extensions

Da App-Erweiterungen als Teil einer Host Anwendung ausgeführt werden (im Gegensatz zu ihrer enthaltenden APP), ist die Datenfreigabe nicht automatisch eingeschlossen, sodass zusätzliche Arbeit erforderlich ist.Since App Extensions run as part of a host application (as opposed to their containing app), the sharing of data isn't automatic included so extra work is required. App-Gruppen sind der Mechanismus, den IOS verwendet, um unterschiedlichen apps das Freigeben von Daten zu gestatten.App Groups are the mechanism iOS uses to allow different apps to share data. Wenn die Anwendungen ordnungsgemäß mit den richtigen Berechtigungen und der Bereitstellung konfiguriert wurden, können Sie auf ein frei gegebenes Verzeichnis außerhalb ihrer normalen IOS-Sandbox zugreifen.If the applications have been properly configured with the correct entitlements and provisioning, they can access a shared directory outside of their normal iOS sandbox.

Konfigurieren einer APP-GruppeConfigure an App Group

Der freigegebene Speicherort wird mit einer App-Gruppekonfiguriert, die im Abschnitt Zertifikate, Bezeichner & profile im IOS dev Centerkonfiguriert ist.The shared location is configured using an App Group, which is configured in the Certificates, Identifiers & Profiles section on iOS Dev Center. Auf diesen Wert muss in den Berechtigungen. plistjedes Projekts verwiesen werden.This value must also be referenced in each project's Entitlements.plist.

Informationen zum Erstellen und Konfigurieren einer APP-Gruppe finden Sie im Handbuch zu App-Gruppenfunktionen .For information on creating and configuring an App Group, refer to the App Group Capabilities guide.

DateienFiles

Die IOS-APP und die Erweiterung können auch Dateien mit einem gemeinsamen Dateipfad freigeben (wenn Sie ordnungsgemäß mit den richtigen Berechtigungen und der Bereitstellung konfiguriert wurden):The iOS app and the extension can also share files using a common file path (given they have been properly configured with the correct entitlements and provisioning):

var FileManager = new NSFileManager ();
var appGroupContainer =FileManager.GetContainerUrl ("group.com.xamarin.WatchSettings");
var appGroupContainerPath = appGroupContainer.Path

Console.WriteLine ("Group Path: " + appGroupContainerPath);

// use the path to create and update files
...

Wichtig

Wenn der zurückgegebene Gruppen Pfad lautet null , überprüfen Sie die Konfiguration der Berechtigungen und des Bereitstellungs Profils, und stellen Sie sicher, dass Sie korrekt sind.If the Group Path returned is null, check the configuration of the entitlements and the provisioning profile and make sure that they are correct.

Updates der Anwendungs VersionApplication version updates

Wenn eine neue Version der Anwendung heruntergeladen wird, erstellt IOS ein neues Basisverzeichnis und speichert das neue Anwendungs Bündel darin.When a new version of your application is downloaded, iOS creates a new home directory and stores the new Application Bundle in it. anschließend verschiebt IOS die folgenden Ordner aus der vorherigen Version Ihres Anwendungspakets in das neue Basisverzeichnis:iOS then moves the following folders from the previous version of your Application Bundle to your new home directory:

  • DokumenteDocuments
  • BibliothekLibrary

Andere Verzeichnisse können auch über das neue Basisverzeichnis kopiert und abgelegt werden, aber nicht unbedingt kopiert werden, sodass die Anwendung nicht auf dieses Systemverhalten angewiesen ist.Other directories may also be copied across and put under your new home directory, but they’re not guaranteed to be copied, so your application should not rely on this system behavior.

ZusammenfassungSummary

In diesem Artikel wurde gezeigt, dass Dateisystem Vorgänge mit xamarin. IOS allen anderen .NET-Anwendungen ähneln.This article showed that file system operations with Xamarin.iOS are similar to any other .NET application. Außerdem wurde die Anwendungs Sandbox eingeführt und die Auswirkungen auf die Sicherheit untersucht.It also introduced the Application Sandbox and examined the security implications that it causes. Als nächstes wurde das Konzept eines Anwendungspakets untersucht.Next, it explored the concept of an Application Bundle. Schließlich wurden die spezialisierten Verzeichnisse aufgelistet, die für Ihre Anwendung verfügbar sind, und ihre Rollen wurden während Anwendungs Upgrades und-Sicherungen erläutert.Finally, it enumerated the specialized directories available to your application and explained their roles during application upgrades and backups.