Wie oben, wie bekomme ich den AppData-Ordner in Windows mit C?Wie wird der Ordner% AppData% in C abgerufen?
Ich weiß, dass Sie für C# Environment.SpecialFolder.ApplicationData
Wie oben, wie bekomme ich den AppData-Ordner in Windows mit C?Wie wird der Ordner% AppData% in C abgerufen?
Ich weiß, dass Sie für C# Environment.SpecialFolder.ApplicationData
Verwenden Sie SHGetSpecialFolderPath mit einem CSIDL auf den gewünschten Ordner (wahrscheinlich CSIDL_APPDATA oder CSIDL_LOCAL_APPDATA) festgelegt. Sie können auch die neueren Funktionen SHGetFolderPath() und SHGetKnownFolderPath() verwenden. Es gibt auch SHGetKnownFolderIDList() und wenn Sie COM mögen, gibt es IKnownFolder::GetPath().
verwenden, wenn ich es richtig erinnere nur
sein sollte#include <stdlib.h>
getenv("APPDATA");
Edit: Gerade doppelt geprüft, funktioniert einwandfrei!
Verwenden Sie stattdessen die richtige API, da Umgebungsvariablen unter Windows eher eine Höflichkeit als ein Vertrag sind. Sie sind möglicherweise nicht unter allen Umständen anwesend. "SHGetKnownFolderPath" * gibt Ihnen jedoch jedes Mal den Pfad. – Joey
Aber SHGetKnownFolderPath möglicherweise auch nicht verfügbar. Starke Kekse. –
@Hans: SHGetSpecialFolderPath sollte jedoch sein. Abhängig vom Betriebssystem zielt man ab. – Joey
Sie könnten these functions verwenden:
#include <stdlib.h>
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
Wie so:
#include <stdio.h>
char *appData = getenv("AppData");
printf("%s\n", appData);
Verwenden Sie stattdessen die richtige API, da Umgebungsvariablen unter Windows eher eine Höflichkeit als ein Vertrag sind. Sie sind möglicherweise nicht unter allen Umständen anwesend. "SHGetKnownFolderPath" * gibt Ihnen jedoch jedes Mal den Pfad. – Joey
Es ist nützlich, Umgebungsvariablen pro Prozess zu überschreiben. Warum sagen Sie, dass sie "mehr eine Höflichkeit als ein Vertrag" sind?Gibt es dazu offizielle oder quasi offizielle Dokumente? –
die Variable %APPDATA%
-Umgebung wird wahrscheinlich die meiste Zeit arbeiten. Wenn Sie jedoch die offizielle Windows-Methode verwenden möchten, verwenden Sie die SHGetFolderPath
function und übergeben Sie den CSIDL-Wert CSIDL_APPDATA
oder CSIDL_LOCAL_APPDATA
, je nach Ihren Anforderungen.
Dies ist, was die Environment.GetFolderPath()
-Methode in .NET verwendet.
EDIT: Joey weist richtig darauf hin, dass dies von SHGetKnownFolderPath in Windows Vista ersetzt wurde. Nachrichten an mich :-).
Beispielcode:
TCHAR szPath[MAX_PATH];
if (SUCCEEDED(SHGetFolderPath(NULL,
CSIDL_APPDATA | CSIDL_FLAG_CREATE,
NULL,
0,
szPath)))
{
PathAppend(szPath, TEXT("MySettings.xml"));
HANDLE hFile = CreateFile(szPath, ...);
}
CSIDL_APPDATA = Benutzername \ Anwendungsdaten. Im Fenster 10: Benutzername \ AppData \ Roaming
CSIDL_FLAG_CREATE = mit CSIDL_ Wert kombiniert Ordnererstellung in SHGetFolderPath zu zwingen()
Sie können auch verwenden:
CSIDL_LOCAL_APPDATA = Benutzername \ Lokale Einstellungen \ Anwendungsdaten (nicht Roaming)
Beachten Sie, dass diese Funktion bereits zweimal ersetzt wurde. Sie können auch die anderen zwei geben (einschließlich der aktuellen und empfohlenen Funktion). – Joey
@Joey - das hatte ich nicht bemerkt. Vielen Dank. – Ferruccio