[C++] Pfad zu User Verzeichnis

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
  • Hallo,


    ich möchte ein Programm schreiben, jedoch hat dies nicht die volle Wirkung erziehlt, und ich habe kleine Debug Codes geschrieben.


    Ich möchte das die Datei "lol.txt" chmod Rechte "IREAD" bekommt. (Schreibgeschützt)


    Code:

    Code
    char* benutzername;
    benutzername = getenv("username");
    
    
    _chmod("C:\\Users\\benutzername\\lol.txt",_S_IREAD);
    cout<<"Debug: Benutzername: "<<benutzername<<;
    
    
    system("pause");





    Ohne "benutzername" also wenn ich den Namen vorgebe, funktioniert das einwandfrei.


    Könnt ihr mir helfen?


    MfG


    Mein Schatz:*


  • using namespace std;


    char* benutzername;



    int _tmain(int argc, _TCHAR* argv[])
    {
    benutzername = getenv("steven");


    _chmod("C:\\user\\benutzername\\lol.txt",_S_IREAD);


    cout << "Debug: Benutzername:\t" << benutzername << endl;


    system("pause");


    return 0;
    }
    }




    5 Mal editiert, zuletzt von .Steven. ()

  • Das kann nicht funktionieren.


    1. da getenv("steven")
    2. "user"? woher?


    Mein Schatz:*

  • Habe es gerade auch probiert.


    Probier mal "string"

    Ja, da dein PC auch "steven" heißt.
    Es soll jedoch dynamisch an jeden PC angepasst sein, deshalb soll der PC Name mit "username" ausgelesen werden, und geöffnet werden. Das ist schon soweit alles richtig.
    Nur wenn ich "benutzername" einsetze funktioniert es nicht, nur wenn ich den PC manuell eingebe, dann geht es.
    Debug sagt mir auch den richtigen PC Namen...




    EDIT:
    So habe ich es jetzt:


    Code
    char* benutzer;benutzer = getenv("username");
    	char* pfad;	pfad = "C:\\Users\\benutzer\\lol.txt";
    
    
    	_chmod(pfad,_S_IREAD);
    	cout<<"Benutzername: "<<benutzer<<""""; 
    	cin.get();	cin.ignore();	system("pause");


    BTW:
    Mit einem String ist das nicht möglich...


    Mein Schatz:*

  • Dann schreib es doch dazu.


    So funktioniert es mit string (sprich. Feste Angabe):


    #include "stdafx.h"
    #include <string>
    #include <io.h>
    #include <iostream>
    #include <sys\stat.h>


    using namespace std;



    string benutzername;



    int _tmain(int argc, _TCHAR* argv[])
    {
    benutzername = "steven";


    if(_chmod("C:\\user\benutzername\lol.txt",_S_IREAD)){

    cout << "Die Rechte wurden erfolgreich gesetzt!" << endl;


    }


    cout << "Debug: Benutzername:\t" << benutzername << endl;


    system("pause");


    return 0;
    }


    Hier dynamisch (sprich. Pfad zum Profil wird automatisch ausgelesen:


    #include "stdafx.h"
    #include <io.h>
    #include <iostream>
    #include <sys\stat.h>


    using namespace std;


    int _tmain(int argc, _TCHAR* argv[])
    {


    if(_chmod("%USERPROFILE%\\lol.txt",_S_IREAD)){

    cout << "Die Rechte wurden erfolgreich gesetzt!" << endl;


    }


    system("pause");


    return 0;
    }


    Das hatte Kenny aber bereits geschrieben....

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • So mein Lieber.


    Ich habe vorhin einen guten Freund von mir gefragt, der sich mit C++ sehr gut auskennt.


    Hier ist die Lösung.


    Sauber und funktioniert einwandfrei.


    #include "stdafx.h"
    #include <io.h>
    #include <iostream>
    #include <sys\stat.h>
    #include <windows.h>
    #include <string.h>


    using namespace std;


    int _tmain(int argc, _TCHAR* argv[]){
    char *benutzer;
    benutzer = getenv("username");


    string sPath("C:/user/");
    sPath.append(benutzer);
    sPath.append("/xd.txt");


    TCHAR szPath[MAX_PATH];


    size_t Count = sPath.length();
    mbstowcs_s(&Count,szPath,sPath.c_str(),MAX_PATH);


    if(SetFileAttributes(szPath, FILE_ATTRIBUTE_READONLY)){
    cout << "Die Rechte wurden erfolgreich gesetzt!" << endl;
    }else{
    cout << "Die Rechte konnten nicht gesetzt werden!" << endl;
    }


    system("pause");


    return 0;


    }

  • Ist ja nett, dass ihr den Benutzernamen in die Variable "benutzername" einlest, aber, das war völlig nutzlos. (Falls ihr interessiert seid, wieso die obrigen Versionen nicht funktionierten)
    "C:\\user\benutzername\lol.txt" schreibt ihr, aber gemeint war sicher "C:\\user\\" + benutzername + "\\lol.txt"