Introduction
Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means, reading and writing files is the easiest task using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute the data files with an app.
User-writable-storage can be implemented natively and then accessed using the DependencyService .
DependencyService
DependencyService allows the apps to call into platform-specific functionality from shared code. This functionality enables Xamarin.Forms apps to do anything that a native app can do.
DependencyService is a dependency resolver. In practice, an interface is defined and DependencyService finds the correct implementation of that interface from the various platform projects. 
Xamarin.Forms apps need three components to use DependencyService
- Interface – The required functionality is defined by an interface in shared code.
- Implementation Per Platform – Classes that implement the interface must be added to each platform project.
- Registration – Each implementing class must be registered with DependencyService via a metadata attribute. Registration enables DependencyService to find the implementing class and supply it in place of the interface at runtime.
- Call to DependencyService – Shared code needs to explicitly call DependencyService to ask for implementations of the interface.
 
The following image explains DependencyService.
![]() Prerequisites
Prerequisites
- Visual Studio 2017(Windows or Mac)
 The steps given below are required to be followed in order to create a file using DependencyService in Xamarin.Forms, using Visual Studio.
 
 
- Setting up a Xamarin.Forms Project
 Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself.
 
Choose the Xamarin.Forms App project type under Cross-platform/App in the "New Project" dialog.
![]() 
  
Name your app, select “Use Portable Class Library” for shared code, and target both - Android and iOS.
![]()
 
You probably want your project and solution to use the same name as your app. Put it in your preferred folder for projects and click "Create".
![]() 
 You now have a basic Xamarin.Forms app. Click the play button to try it out.
![]() Creating Interface
 Creating Interface
Create an interface in Xamarin.Forms PCL. Go to Solution—>PCL—>Right click—>New—>Empty Class—>IFileReadWrite.cs.
![]() 
  
Now, write the following code.
IFileReadWrite.cs
- using System;  
- using Xamarin.Forms;  
- namespace XamarinForms_Files {  
-     public interface IFileReadWrite {  
-         void WriteData(string fileName, string data);  
-         string ReadData(string filename);  
-     }  
- }  
 
Implementation per Platform
Android Implementation
Go to Solution—>Droid—>Right click—>New—>Empty Class—>FileHelper.cs.
![]() 
 Now, write the following code in this file.
 
FileHelper.cs
- using System;  
- using System.IO;  
- using Xamarin.Forms;  
- using XamarinForms_Files;  
- using XamarinForms_Files.Droid;  
- [assembly: Dependency(typeof(FileHelper))]  
- namespace XamarinForms_Files.Droid {  
-     public class FileHelper: IFileReadWrite {  
-         public void WriteData(string filename, string data) {  
-             var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);  
-             var filePath = Path.Combine(documentsPath, filename);  
-             File.WriteAllText(filePath, data);  
-         }  
-         public string ReadData(string filename) {  
-             var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);  
-             var filePath = Path.Combine(documentsPath, filename);  
-             return File.ReadAllText(filePath);  
-         }  
-     }  
- }  
 
![]() iOS Implementation
 iOS Implementation
Go to Solution—>iOS—>Right click—>New—>Empty Class—>FileHelper.cs. Now, write the following code.
 
![]() FileHelper.cs
 FileHelper.cs
- using System;  
- using System.IO;  
- using Xamarin.Forms;  
- using XamarinForms_Files.iOS;  
- using XamarinForms_Files;  
- [assembly: Dependency(typeof(FileHelper))]  
- namespace XamarinForms_Files.iOS {  
-     public class FileHelper: IFileReadWrite {  
-         public void WriteData(string filename, string data) {  
-             var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);  
-             var filePath = Path.Combine(documentsPath, filename);  
-             File.WriteAllText(filePath, data);  
-         }  
-         public string ReadData(string filename) {  
-             var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);  
-             var filePath = Path.Combine(documentsPath, filename);  
-             return File.ReadAllText(filePath);  
-         }  
-     }  
- }  
 
For setting up the User Interface, go to MainPage.Xaml and write the following code.
MainPage.Xaml
- <?xml version="1.0" encoding="utf-8"?>  
- <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:XamarinForms_Files" x:Class="XamarinForms_Files.XamarinForms_FilesPage">  
-     <StackLayout VerticalOptions="CenterAndExpand" HorizontalOptions="Center">  
-         <Entry x:Name="txtText" Placeholder="Write some text..."></Entry>  
-         <Button x:Name="btnWrite" Text="Write"></Button>  
-         <Button x:Name="btnRead" Text="Read"></Button>  
-         <Label x:Name="lblFileTexts" HorizontalTextAlignment="Center" LineBreakMode="WordWrap" Text="File Values:"></Label> </StackLayout>  
- </ContentPage>  
 
 
Call DependencyService
In this step, call DependencyService for your PCL.
- using Xamarin.Forms;  
- namespace XamarinForms_Files {  
-     public partial class XamarinForms_FilesPage: ContentPage {  
-         string fileName = "MyFile.txt";  
-         public XamarinForms_FilesPage() {  
-             InitializeComponent();  
-             btnWrite.Clicked += (sender, e) => {  
-                 string data = txtText.Text;  
-                   
-                 DependencyService.Get < IFileReadWrite > ().WriteData(fileName, data);  
-                 txtText.Text = string.Empty;  
-             };  
-             btnRead.Clicked += (sender, e) => {  
-                   
-                 string data = DependencyService.Get < IFileReadWrite > ().ReadData(fileName);  
-                 lblFileTexts.Text = data;  
-             };  
-         }  
-     }  
- }  
 
 
Click the play button to try it out.
![]() 
  
I hope you will understand how to create a file using DependencyService.
 
Summary
This was the process of creating a file using DependencyService in Xamarin.Forms.
Thanks for reading. Please share your comments and feedback.