Seite 1 von 1
"Eigene Dateien"-Ordner ermitteln
Verfasst: 11. November 2008 14:06
von reinki0013
Hallo zusammen,
also ich würde gerne bei meinem Programm aus einer Textdatei
einlesen... Soweit so gut... allerdings möchte ich gerne das Verzeichnis
festlegen, wo die zu öffnende Datei liegt.
Also mit
Code: Alles auswählen
QFileDialog::getOpenFileName(this, tr("Open File"), QDir::homePath, tr("Textdateien(*.txt) ") );
kann ich ohne probleme den Dialog öffen. Allerdings befinde ich mich dann in C:\Dokumente und Einstellungen\Besitzer
Allerdings möchte ich gerne in den Ordner "Eigene Dateien" kommen.
Hat da jemand einen Vorschlag für mich?
Oder einen Tipp??
Besten dank
Lg Reinki
Verfasst: 11. November 2008 14:16
von mathies
ruf einfach
QDir::currentPath() auf...liefert dir das aktuelle Verzeichnis als QString zurück
......
sorry, irgendwie falsch gelesen

Verfasst: 11. November 2008 14:53
von macman
In der Registry findest Du alles Nötige unter HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Verfasst: 11. November 2008 14:58
von CaptnChaos
Dann würde ich dir empfehlen über die Registry zu gehen. QSettings bietet die nötigen funktionen dazu.
Verfasst: 11. November 2008 16:04
von Christian81
KernelPanic hat geschrieben:Dann würde ich dir empfehlen über die Registry zu gehen. QSettings bietet die nötigen funktionen dazu.
Oder besser gleich WinAPI (SHGetSpecialFolderPath(W) ) - die Lage der Registry-Schlüssel sind nirgends festgelegt und können von Version zu Version anders sein.
Verfasst: 11. November 2008 16:21
von macman
Christian81 hat geschrieben:Oder besser gleich WinAPI (SHGetSpecialFolderPath(W) )
Oder SHGetSpecialFolderLocation. SHGetSpecialFolderPath gibt es erst seit Shell32.dll, Version 4.71

Kam mit dem IE4.
Verfasst: 17. November 2008 09:49
von reinki0013
hallo zusammen,
ich habe nun etwas gefunden wie ich es auch lösen kann...
Allerdings muss man bei den Projekteigenschaften "Common Language Runtime-Unterstützung" aktivieren...
danach kann man mit
Code: Alles auswählen
Pfad.sprintf("%s", System::Environment::GetFolderPath( System::Environment::SpecialFolder::MyDocuments ));
den Ordner "Eigene Dateien" ermitteln...
lg Reinki
Verfasst: 17. November 2008 10:50
von macman
reinki0013 hat geschrieben:ich habe nun etwas gefunden wie ich es auch lösen kann...
Und das Schlechteste was Du finden konntest, denn dafür muss das .Net-Framework installiert sein. Willst Du das wirklich?
Warum nicht einfach den Weg, den wir dir vorgeschlagen haben? (Ohne Gewähr, nur so aus dem Kopf)
Code: Alles auswählen
TCHAR lpBuffer[_MAX_PATH];
int ret = SHGetSpecialFolderPath(NULL, lpBuffer, CSIDL_PERSONAL, 0);
QString myFilesPath = QString::fromUtf16(lpBuffer);
Das funktioniert ab Win2000 ohne zusätzliche Installationen. Für NT lege ich meine Hand nichts Feuer, zu viele schlechte Erfahrungen

Verfasst: 17. November 2008 10:51
von gerome69
reinki0013 hat geschrieben:
ich habe nun etwas gefunden wie ich es auch lösen kann...
Allerdings muss man bei den Projekteigenschaften "Common Language Runtime-Unterstützung" aktivieren...
danach kann man mit
Code: Alles auswählen
Pfad.sprintf("%s", System::Environment::GetFolderPath( System::Environment::SpecialFolder::MyDocuments ));
den Ordner "Eigene Dateien" ermitteln...
lg Reinki
Ganz schlechte Idee!
Damit mischt du Qt-Framework und .net-Framework (woher dieses System::Environment...) stammt!
Benutze die vorgeschlagene WinAPI-Funktion.
Gruß, Gérôme
Verfasst: 17. November 2008 12:54
von reinki0013
macman hat geschrieben:reinki0013 hat geschrieben:ich habe nun etwas gefunden wie ich es auch lösen kann...
Und das Schlechteste was Du finden konntest, denn dafür muss das .Net-Framework installiert sein. Willst Du das wirklich?
Warum nicht einfach den Weg, den wir dir vorgeschlagen haben? (Ohne Gewähr, nur so aus dem Kopf)
Code: Alles auswählen
TCHAR lpBuffer[_MAX_PATH];
int ret = SHGetSpecialFolderPath(NULL, lpBuffer, CSIDL_PERSONAL, 0);
QString myFilesPath = QString::fromUtf16(lpBuffer);
Das funktioniert ab Win2000 ohne zusätzliche Installationen. Für NT lege ich meine Hand nichts Feuer, zu viele schlechte Erfahrungen

und wie soll ich das dann anwenden?
wenn ich den Quellcode so rein kopiere, kommen 7 Fehlermeldungen...
Muss ich da zusätzlich etwas inkludieren (header?) oder so?
hab leider noch keine Erfahrung damit, darum diese Fragen...
Verfasst: 17. November 2008 12:57
von Christian81
Sollen wir jetzt raten wie dei Fehlermeldungen lauten oder sagst Du sie uns auch?
Wohl vergessen shlobj.h zu inkludieren. Siehe auch Doku zu ShGetSpecialFolderPath -->
http://msdn.microsoft.com/en-us/library ... S.85).aspx
Verfasst: 17. November 2008 13:20
von reinki0013
also das war des rätsels lösung, hab das inklude nicht eingefügt...
und schon funktionierts....
jetzt hätte ich noch eine Frage...
Wie komme ich auf den Ordner "Gemeinsame Dateien"?
Verfasst: 17. November 2008 13:34
von pfid
reinki0013 hat geschrieben:
also das war des rätsels lösung, hab das inklude nicht eingefügt...
und schon funktionierts....
jetzt hätte ich noch eine Frage...
Wie komme ich auf den Ordner "Gemeinsame Dateien"?
http://msdn.microsoft.com/en-us/library ... S.85).aspx
?

Verfasst: 17. November 2008 13:39
von reinki0013
pfid hat geschrieben:reinki0013 hat geschrieben:
also das war des rätsels lösung, hab das inklude nicht eingefügt...
und schon funktionierts....
jetzt hätte ich noch eine Frage...
Wie komme ich auf den Ordner "Gemeinsame Dateien"?
http://msdn.microsoft.com/en-us/library ... S.85).aspx
?

Besten dank, habs gerade auch selber gefunden, mit deutscher Beschreibung....
Besten dank für eure Hilfe...
Somit fällt auch das .NET-Framework bei meinem Programm weg...
echt toll, besten dank....
lg Reinki