Как проверить разрешенный (развернутый) путь к специальной папке AppData для платформы «Windows Machine» в MAUIC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как проверить разрешенный (развернутый) путь к специальной папке AppData для платформы «Windows Machine» в MAUI

Сообщение Anonymous »

Возможно, есть простой способ сделать это, но я просто не знаю, какой он. У меня есть переносимая библиотека классов, которая поддерживает .NET MAUI {Windows, Android, iOS}, а также WinForms и WPF. Проблема заключается в этом синглтоне, целью которого является создание пути к базе данных настроек:

Код: Выделить всё

protected virtual string DatabasePath
{
get
{
if (_databasePath is null)
{
var platformDirectory = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

Directory.CreateDirectory(platformDirectory);

_databasePath = Path.Combine(platformDirectory, "settings.db");
using (var cnx = new SQLiteConnection(DatabasePath))
{
cnx.CreateTable();
cnx.CreateTable();
}

Debug.WriteLine($"250106.A: {DatabasePath}");

bool openLocation = false;
{ } // [WINDOWS] As a debugging convenience, set openLocation to true to open directory in FileExplorer.
if (openLocation)
{
Process.Start(new ProcessStartInfo
{
UseShellExecute = true,
FileName = platformDirectory
});
}
}
return _databasePath;
}
}
string? _databasePath = null;
Очевидная цель — создать каталог, специфичный по организации и применению. Android, например, по умолчанию соответствует этому требованию, поэтому _databasePath отображается как:

Код: Выделить всё

/data/user/0/com.ivsoftware.demo.maui.onepage/files/settings.db
Однако на платформе Windows, построенной в MAUI, проверка значения _databasePath отображается как:

Код: Выделить всё

C:\Users\tgreg\AppData\Local\settings.db
...хотя на самом деле (с некоторой ручной навигацией) мы можем определить, что это не совсем так. Фактический разрешенный путь:

Код: Выделить всё

C:\Users\tgreg\AppData\Local\Packages\com.ivsoftware.demo.maui.onepage_9zz4h110yvjzm\LocalCache\Local\settings.db
Почему это важно
В сценарии отладки WinForms ( например) этот же код ДЕЙСТВИТЕЛЬНО создаст файл здесь:

Код: Выделить всё

C:\Users\tgreg\AppData\Local\settings.db
Наверное, мы все согласимся, что это было бы плохо. Итог: если можно определить эффективный путь, мы сможем сделать это:

Код: Выделить всё

protected virtual string DatabasePath
{
get
{
if (_databasePath is null)
{
bool needQualify = ??? /* DETERMINED BY INSPECTING EFFECTIVE PATH. */;

var platformDirectory = needQualify
? Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"IVSoftware",
Assembly.GetEntryAssembly()?.GetName().Name ?? "Unknown")
: Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);

Directory.CreateDirectory(platformDirectory);
.
.
.
}
}
}
string? _databasePath = null;
Итак, как мне получить «настоящий» квалифицированный путь в .NET MAUI Windows?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ndows-mach
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»