How to load text file on Android?

Hello.
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.

Edit:
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)
        {
            try
            {
                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))
                    Directory.CreateDirectory(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(ex.ToString());
                System.Diagnostics.Debug.WriteLine("Unhandled exception:");
                System.Diagnostics.Debug.WriteLine(e.ToString());
            }
        }

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(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:

2 Likes

Hmmm, interesting, thanks!