Seite 1 von 1

lokale- oder angebundene netzwerkpartition

Verfasst: 23. August 2010 15:05
von samsamsam
hallo,

ich arbeite grad an einer projektdatei, die den akt. zustand des programms abspeichern soll. ein "zustand" wäre, welche datei bearbeitet wurde.

diese projektdatei wird dann an andere user verschickt und wenn sie geladen ist, soll der abs. gleiche zustand des programms zu sehen sein wie bei dem ersteller der projektdatei zur zeit des erstellens.

wenn die datei lokal vorhanden ist, darf keine projektdatei erstellt werden, da andere user auf anderen clients arbeiten. desweiteren kann bei dem einen ein netzwerklaufwerk unter H: und bei dem anderen unter S: gemountet sein. daher würd ich in die projektdatei abspeichern wollen:

absoluter_pfad_zur_partition\ordner1\meinedatei.txt
anstatt
G:\ordner1\meinedatei.txt

kann qt den abs. pfad einer partition ermitteln und wenn ja wie?

Verfasst: 23. August 2010 15:31
von anno1988

Verfasst: 23. August 2010 15:41
von samsamsam

Code: Alles auswählen

QDir dir("Y:");
QString path = dir.absoluteFilePath("Y:/data_etc.tgz");
//liefert leider nurY:/data_etc.tgz
y: ist aber ein netzwerklaufwerk. it absoluteFilePath bekomm ich aber keinen absoluten pfad, unter dem das netzwerklaufwerk gemountet wurde. hat jemand eine idee?

Verfasst: 23. August 2010 15:55
von anno1988
welche ausgabe willst du denn erreichen?

so etwas?

\\server01\home".

Verfasst: 23. August 2010 15:58
von samsamsam
in etwa so:

\\192.168.1.201\home

Verfasst: 23. August 2010 16:01
von anno1988
ich vermute mal das geht nur per windows api. aber ohne gewähr

Verfasst: 23. August 2010 16:03
von samsamsam
schade. ich dachte qt könnte das. wär schön gewesen, da das programm, das ich entwickle plattformübergreifend laufen soll..

Verfasst: 24. August 2010 09:38
von samsamsam
hab die lösung zumindest unter windows gefunden. die msdn-funktion heisst

Code: Alles auswählen

DWORD WNetGetUniversalName(
  __in     LPCTSTR lpLocalPath,
  __in     DWORD dwInfoLevel,
  __out    LPVOID lpBuffer,
  __inout  LPDWORD lpBufferSize
);
das einzige, was anfangs probleme gemacht hat ist die erfolgreiche umwandlung von qstring -> std::string -> LPCTSTR und später zurück. am sonsten liefert die funktion für ein tatsächlich gemountetes laufwerk (in form von string , z.b. "Y:\") den absoluten pfad, in form von \\server\home\ und dann müsste man evtl. server nach ipadresse umwandeln. wenn ein laufwerkbuchstabe übergeben ist, der nicht zu einem gemounteten laufwerk gehört, dann wird nach dem aufruf ein leerer string im lpBuffer stehen.