eine Textdatei in dem Temporary-Ordner speichern



  • leute, ich hab folgendes problem: ich muss mit C++ eine Textdatei in einem Temp-Ordner für einen anderen Programteil abspeichern, aber ich will das ned auf "C:\Windows\Temp" speichern, da man ja öfters keinen zugriff auf diesen Ordner als Nicht-Admin hat (is auf jedenfall bei uns in der schule so). Ich hab rausgefunden, dass man mit %TEMP% auf dem Temp-Ordner von seinem Account zugreifen kann (C:\Dokumente und Einstellungen\{USERNAME}\Lokale Einstellungen\Temp)

    das Problem ist, dass das C++-Programm(ich mache eg ne DLL aber es ist ja erstma egal, glaub ich) das %Temp% ned erkennt... er speichert also da nix ab.... was soll ich machen??? was kann man da reinschreiben??? oder hat jemand nen ganz anderen vorschlag???



  • Muss es der Tempordner sein? Ansonsten leg dir doch die textdatei einfach in dem Ordner ab wo auch deine exe drinne liegt.



  • Dim89K schrieb:

    (C:\Dokumente und Einstellungen\{USERNAME}\Lokale Einstellungen\Temp)

    Da könnte dir folgendes vielleicht helfen:

    http://msdn.microsoft.com/en-us/library/bb762204(VS.85).aspx

    folgendes ID:

    CSIDL_LOCAL_APPDATA = C:\Documents and Settings\username\Local Settings\Application Data

    Weitere ID gibt es hier: http://msdn.microsoft.com/en-us/library/bb762494(VS.85).aspx

    Du kannst unter AppData einen ordner für deine Software machen und da, dann deine Datei temporär abspeichern.

    Dim89K schrieb:

    das Problem ist, dass das C++-Programm(ich mache eg ne DLL aber es ist ja erstma egal, glaub ich) das %Temp% ned erkennt... er speichert also da nix ab.... was soll ich machen??? was kann man da reinschreiben??? oder hat jemand nen ganz anderen vorschlag???

    %Temp% ist eine Systemvariable die erst einmal gesetz werden muss und ob und vorallem wie du dann die Tempsystemvariable aufrufen kannst, weiß ich nicht.

    Allerdings lassen sich mit hilfe der Funktion SHGetSpecialFolderPath() (dazu guck dir den Link oben an), solche Spezielle Pfade recht einfach rausfinden.

    Diese Funktion ist in der shell32.lib und seit Win 95 (inkl. Internet Explorer 4.0) auf allen Windowssystemen, also sollte das nicht das Problem sein.

    Gruß
    Rudi G



  • Firefighter schrieb:

    Muss es der Tempordner sein?

    stimmt, ich hab vergessen zu sagen, wieso das so ist... ^^ also wir arbeiten mit WAVE-dateien und öffnen diese halt über ne GUI... aber wenn wir die Schnittstellendatei erstellen(halt die TXT-datei), dann speichert er die im ordner, wo die WAVE-datei ist udn nicht wo die EXE(und auch die DLL) ist... deswegen hab ich mir überlegt ma im Temp-ordner was zu speichern... 😉



  • Dim89K schrieb:

    stimmt, ich hab vergessen zu sagen, wieso das so ist... ^^ also wir arbeiten mit WAVE-dateien und öffnen diese halt über ne GUI... aber wenn wir die Schnittstellendatei erstellen(halt die TXT-datei), dann speichert er die im ordner, wo die WAVE-datei ist udn nicht wo die EXE(und auch die DLL) ist... deswegen hab ich mir überlegt ma im Temp-ordner was zu speichern... 😉

    Dann währe ja das Verzeichnis "C:\Documents and Settings\username\Local Settings\Application Data " (siehe 2 Post's höher) genau richtig dafür, ihr könntet da die Wave und die Txt-Datei abspeichern.

    Gruß
    Rudi G



  • unter Windows kannst Du mit 'GetEnvironmentVariable' diese Variablen abfragen. Etwa so:

    const int BUFSIZE = 400;
        char buf[BUFSIZE];
        const DWORD ret = GetEnvironmentVariableA( "TEMP", buf, BUFSIZE );  // benötigt #include <windows.h>
        assert( ret > 0 && ret < BUFSIZE );
        // cout << "[" << buf << "]" << endl; // Kontrollausgabe
        const string SLASH = "/";
        ofstream datei( (buf + SLASH + "output.txt").c_str() );
        // usw. 'datei' beschreiben
    

    Gruß
    Werner



  • ja, aber das ist ein bissl kompliziert... wir benutzen ja eine in Delphi kompilierte EXE und da ist es halt ja auch anders... und diese Prozedur mit den ganzen CSIDLs ist ein bissl kompliziert ^^

    wir haben das prob jetzt so gelöst, dass wir in Delphi den Aktuellen ordner mit GetCurrentDir den aktuellen ordner bestimmen(was in C++ ja iwie ned ging) und den pfad an die DLL übergeben

    danke für die ganzen Posts 😉



  • Dim89K schrieb:

    wir haben das prob jetzt so gelöst, dass wir in Delphi den Aktuellen ordner mit GetCurrentDir den aktuellen ordner bestimmen(was in C++ ja iwie ned ging) und den pfad an die DLL übergeben

    schlechte Idee... wenn das Programm unter C:\Programme installiert ist => kein Zugriff als Nicht-Admin (zumindest kein schreibender)
    wenn das Programm unter C:\ liegt hat man auch Nicht-Admin ebenfalls nur Lesezugriff

    dazu noch diverse andere Ordner...

    Darüber hinaus geht die Möglichkeit verloren, für einzelne User unterschiedliche Dateien abzulegen...

    Und von Delphi war nie die Rede (du bist hier im C++-Forum, falls du es noch nicht gelesen hast)
    Das in C++ ein GetCurrentDir nicht vorhanden ist, liegt einfach daran, dass man für sowas auf Betriebssystemspezifische Schnittstellen zurückgreifen muss. Welche das sind, findest du in den Links, die dir Rudi netter- aber überflüssigerweise gepostet hat


Anmelden zum Antworten