So überprüfen Sie den aufgelösten (bereitgestellten) AppData-Spezialordnerpfad für die Plattform „Windows Machine“ in MAC#

Ein Treffpunkt für C#-Programmierer
Guest
 So überprüfen Sie den aufgelösten (bereitgestellten) AppData-Spezialordnerpfad für die Plattform „Windows Machine“ in MA

Post by Guest »

Es gibt wahrscheinlich einen einfachen Trick dafür, aber ich weiß nur nicht, was das ist. Ich habe eine portable Klassenbibliothek, die .NET MAUI { Windows, Android, iOS }, aber auch WinForms und WPF unterstützt. Das Problem liegt in diesem Singleton, dessen Zweck darin besteht, den Einstellungsdatenbankpfad zu generieren:

Code: Select all

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;
Das offensichtliche Ziel besteht darin, ein Verzeichnis zu erstellen, das hinsichtlich Organisation und Anwendung spezifisch ist. Android erfüllt diese Anforderung beispielsweise standardmäßig, sodass _databasePath wie folgt gerendert wird:

Code: Select all

/data/user/0/com.ivsoftware.demo.maui.onepage/files/settings.db
Auf einer Windows-Plattform mit MAUI wird jedoch bei der Überprüfung des _databasePath-Werts Folgendes angezeigt:

Code: Select all

C:\Users\tgreg\AppData\Local\settings.db
... obwohl wir tatsächlich (mit etwas manueller Navigation) feststellen können, dass dies nicht wirklich der Fall ist. Der tatsächlich aufgelöste Pfad ist:

Code: Select all

C:\Users\tgreg\AppData\Local\Packages\com.ivsoftware.demo.maui.onepage_9zz4h110yvjzm\LocalCache\Local\settings.db
Warum es wichtig ist
In einem WinForms-Debug-Szenario ( (zum Beispiel) wird derselbe Code WIRKLICH hier eine Datei erstellen:

Code: Select all

C:\Users\tgreg\AppData\Local\settings.db
Wir sind uns wahrscheinlich alle einig, dass das schlecht wäre. Fazit: Wenn der effektive Pfad ermittelt werden kann, können wir Folgendes tun:

Code: Select all

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;
Wie erhalte ich also den „echten“ qualifizierten Pfad unter .NET MAUI Windows?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post