How to load text file on Android?

I’m trying to load text file by

        var filePath = Path.Combine(Content.RootDirectory, "l1.dat");
        using (var stream = TitleContainer.OpenStream(filePath))
            text = File.ReadAllText(filePath);

It’s just for test, but I don’t know where to put l1.dat, because whatever i try (with content directory or not), I get

System.IO.DirectoryNotFoundException: Could not find a part of the path “/Content/l1.dat”.

First time I do something for Android so I have no idea what should I do with this.

The main question is:
how to add a existing file with data to a project and what path to it will be on device after compile.

I believe all the stuff in an Android build deploys as an APK file, I’m not sure if there’s an actual Content directory (I could be wrong here, I’m still learning :D).

Having said that, you do get access to the file system on Android, just in a different directory and you can get it via Android.OS.Environment.ExternalStorageDirectory.

There’s other storage areas on Android as well, but I’m not sure how to use them offhand. Google knows though… :slight_smile:

Here’s an example showing how I log crash dumps in my game.

        private void Handle_UnhandledException(object sender, UnhandledExceptionEventArgs e)
                string baseFile = "CrashLog";

                string fileName = string.Format("{0}_{1}.txt", baseFile, DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss-fff"));
                string dir = Path.Combine(_appStorageDir, "Log");
                if (!Directory.Exists(dir))
                string path = Path.Combine(dir, fileName);

                File.WriteAllText(path, e.ExceptionObject.ToString());
            catch (Exception ex)
                System.Diagnostics.Debug.WriteLine("Unable to log dump file.");
                System.Diagnostics.Debug.WriteLine("Unhandled exception:");

        protected override void OnCreate(Bundle bundle)

            _appStorageDir = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.ToString(), "ArbitraryPixel", "CodeLogic");
            AppDomain.CurrentDomain.UnhandledException += Handle_UnhandledException;

            // Other code

// This work on my case ^ _^ y
// E.G: string[] m_TextLines = ReadAllTextLinesFromFile( “Content/TextData/l1.dat” , true );

        /// <summary>
        /// Read all text lines in a text file and returns an array of strings.
        /// </summary>
        /// <param name="filePath">File path to read.</param>
        /// <returns>Returns an array of strings.</returns>
        public static string[] ReadAllTextLinesFromFile(string filePath, bool IsAndroid )

            string[] m_Result = null;

            if ( IsAndroid )
                using (SIO.Stream m_FS = XF.TitleContainer.OpenStream(filePath))
                    using (SIO.StreamReader m_SR = new SIO.StreamReader(m_FS))
                        var m_TextList = new SCG.List<string>();
                        while (!m_SR.EndOfStream) m_TextList.Add(m_SR.ReadLine());
                        m_Result = m_TextList.ToArray();
                        m_TextList = null;
            else// Windows
                m_Result = SIO.File.ReadAllLines(filePath);

            return m_Result;

@DexterZ @Trinith
Thank you for answer! It will be very usefull, but now I also understand, that I give a wrong qustion :smiley: My problem is that, I don’t know how to add to project a file with some data and after it, where to find it on device.

I edit my example and make it more generic without my device setting and make it as a parameter ^_^y the sample above works perfectly on my case…

I’m not sure if you can… I would be interested to see if other people know anything :slight_smile:

Just put it in the “Assets” folder in your solution. There’s even a “AboutAssets.txt” on how to load that file :slight_smile:


Hmmm, interesting, thanks!