Correct file saving path on a maui multiplatform app

204 views Asked by At

I'm trying to save a backup file file in my .net maui app, but somehow I can't manage to get the correct path for saving my files. So far the App is developped for Android only, but I want to keep it as generic as possible. I ended up finding a workaround, but I'm sure this isn't the way to ahcieve this.

My code to save a file so far :

public void WriteAppDataFile()
{
    if (AppData.User != null)
    {
        try
        {
            string FileName = String.Format("backup_user{0}.json", AppData.User.Id);
            string History = AppData.User.History;

            // Workaround I found is to hardcode the directory path, but no guarantee for the path to be the same on all situations or on all devices.
            string SaveDirectory = "/storage/emulated/0/Android/data/com.mycompany.myapp/files";

            var path = Path.Combine(SaveDirectory, FileName);
            File.WriteAllText(path, History);
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }
    }
}

The other options I tried so far :

  • Option 1
#if ANDROID
SaveDirectory = Android.App.Application.Context.GetExternalFilesDir(Android.OS.Environment.DirectoryDocuments).AbsoluteFile.Path;
#endif

Returns "/storage/emulated/0/Android/data/com.mycompany.myapp/files/Documents". Saves the file at the given location, but is working only on Android and I can't find a way to get this path without an extra folder, here Documents.

  • Option 2
SaveDirectory = FileSystem.Current.AppDataDirectory;

Returns "/data/user/0/com.mycompany.myapp/files". According to the documentation, it should give me the appdata path, no matter the device type, but when running I can't find the folder in the phone storage. However it compiles and I get no exception raised.

So here's my question : what's the best way to get the correct path to save files, ideally without specifying the device type ? And why is the FileSystem directory nowhere to be found on the phone ?

1

There are 1 answers

2
GChapX On BEST ANSWER

Okay actually after looking arround and thanks to the guidances in comment, it turns out there is no way to get a general location for user-accessible file without having some platform-specific code. I was able to get access to my generic folder in Android using this code :

#if ANDROID
docsDirectory = Android.App.Application.Context.GetExternalFilesDir(null).AbsoluteFile.Path;
#endif

It needs some implementation for other platforms as well, but at least I can get access to the folder wihtout having to hard code it, and the file is saved properly !