Textdateien unter MFC C++ schreibschützen....?



  • Morgens!!

    müsste textdateien schreibschützen und nachher wieder schreibschutz entfernen.
    wie stelle ich das an?? 😕

    danke



  • Moin,

    bin nicht der einzigste der nen Kaffee braucht *fg*. Gucke mal, habe das in der MSDN gefunden:

    BOOL SetFileAttributes(
    LPCTSTR lpFileName,
    DWORD dwFileAttributes
    );

    Parameters
    lpFileName
    [in] Pointer to a string that specifies the name of the file whose attributes are to be set.
    In the ANSI version of this function, the name is limited to MAX_PATH characters. To extend this limit to 32,767 wide characters, call the Unicode version of the function and prepend "\?\" to the path. For more information, see Naming a File.

    Windows Me/98/95: This string must not exceed MAX_PATH characters.

    dwFileAttributes
    [in] File attributes to set for the file. This parameter can be one or more of the following values. However, all other values override FILE_ATTRIBUTE_NORMAL. Attribute Meaning
    FILE_ATTRIBUTE_ARCHIVE The file is an archive file. Applications use this attribute to mark files for backup or removal.
    FILE_ATTRIBUTE_HIDDEN The file is hidden. It is not included in an ordinary directory listing.
    FILE_ATTRIBUTE_NORMAL The file has no other attributes set. This attribute is valid only if used alone.
    FILE_ATTRIBUTE_NOT_CONTENT_INDEXED The file will not be indexed by the content indexing service.
    FILE_ATTRIBUTE_OFFLINE The data of the file is not immediately available. This attribute indicates that the file data has been physically moved to offline storage. This attribute is used by Remote Storage, the hierarchical storage management software. Applications should not arbitrarily change this attribute.
    FILE_ATTRIBUTE_READONLY The file is read-only. Applications can read the file but cannot write to it or delete it.
    FILE_ATTRIBUTE_SYSTEM The file is part of the operating system or is used exclusively by it.
    FILE_ATTRIBUTE_TEMPORARY The file is being used for temporary storage. File systems avoid writing data back to mass storage if sufficient cache memory is available, because often the application deletes the temporary file shortly after the handle is closed. In that case, the system can entirely avoid writing the data. Otherwise, the data will be written after the handle is closed.

    *winke*

    Hellsgore



  • leider verstehe ich diesen kram hier nicht so ganz...fange grad damit an

    BOOL SetFileAttributes( LPCTSTR lpFileName, DWORD dwFileAttributes );

    was mir kopfschmerzen bereitet ist dieses LPCTSTR

    was fuer ne art von string ist das?

    werde auch im netz mal schaun..!! 😃

    danke dir!!!!



  • Guenter Mies schrieb:

    leider verstehe ich diesen kram hier nicht so ganz...fange grad damit an

    BOOL SetFileAttributes( LPCTSTR lpFileName, DWORD dwFileAttributes );

    was mir kopfschmerzen bereitet ist dieses LPCTSTR

    LP = Long-Pointer
    CT = Konstante
    STR = String



  • verdammter pointerkram....werd ich NIE verstehen

    ohne koennte das leben so einfach sein!!!!

    😞



  • Ist en Charpointer,
    pass auf
    machst das am besten so:

    //Hast wahrscheinlich den Pfad in einem CString stehen
    CString strPfad = "C:\\DeinPfad\\DeineDatei.txt"
    TCHAR cPfad[255];
    memset(cPfad, 0, sizeof(cPfad));
    
    strcpy(cPfad, strPfad);
    //ab hier hast du allesin cPfad stehen das nimmste jetzt und:
    
    //Versteckt und schreibgeschützt setzen
    ::SetFileAttributes(cPfad, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN);
    

    Ach ich Ulles ich sehe gerade du brauchst garnicht den string in den char zu kopieren das geht auch so mit dem CString. Klar ich habe den Datentyp nicht beobachtet (LPCTSTR > konstant)*g* aber klappt auch so...

    *winke*
    Hellsgore



  • also ich habe diese paar zeilen und kriege es nicht gebacken.... schande über mich
    🤡

    CString Dateiname ="Daten\\Neukunden\" + m_MatrixOffeneAnfragen[m_zahl][0] +"KDneu.txt";
    CFile datei(Dateiname, CFile::modeCreate |CFile::modeWrite );
    datei.Write(str,laenge);

    //////SCHREIBSCHUTZ
    BOOL SetFileAttributes(Dateiname, FILE_ATTRIBUTE_READONLY);
    //////

    datei.Close();
    UpdateData(false);

    helft mir bitte!!!



  • Gucke:

    CString Dateiname ="Daten\\Neukunden\\" + m_MatrixOffeneAnfragen[m_zahl][0] +"KDneu.txt"; 
    CFile datei(Dateiname, CFile::modeCreate |CFile::modeWrite ); 
    datei.Write(str,laenge); 
    
    //////SCHREIBSCHUTZ 
    ::SetFileAttributes(Dateiname, FILE_ATTRIBUTE_READONLY); //da war der Fehler
    DWORD dwError = GetLastError();
    //wenns noch einen Fehler gibt durchdebuggen und in dwError gucken
    ////// 
    
    datei.Close(); 
    UpdateData(false);
    

    *winke*



  • Ja Moment geht das so überhaupt?
    musste mal testen weiss das jetzt nicht so genau ob man attribute verändern kann während die Datei genutzt wird ich glaube aber nicht. Musst mal schauen wenn es einen Fehler gibt dann steht der bestimmt in dwError. Dann musst du die Attribute nachdem du die Datei geschlossen hast setzen.....



  • sorry hatte dein vorletztes posting noch nicht gesehen

    VIELEN DANK AUCH!!!

    wenn du mir nun noch mit dieser drecks dateikonvertierung helfen kannst wirst du auf ewig in meiner liste der hilfsbereiten superC++ler stehen 😃



  • Hilfsbereit schon aber kein super c++ler *g*



  • 😃 😃 😃 sollte dich nicht von dem DATEIKONVERTIERUNGSPROB abhalten... 😃 😃 😃



  • SCHREIBSCHUTZ SO WIE IN DIESEN CODEZEILEN ANGEGEBEN FUNZT!!!!!!!!!!!

    weltgroessten dank 😃


Log in to reply