boot.ini, läst sich nicht ändern



  • Hi,
    Ich weiß nicht ob ich hier im richtigen Forum bin aber ich schreibs einfach mal:

    #include <iostream>
    #include <string>
    #include <windows.h>
    #include <fstream>
    using namespace std;
    
    int main()
    {
    
        string boot_ini[6] ; 
    	string danam = "C:\\boot.ini";
    	ifstream dat_ein ;
    	ofstream dat_aus ;
    
    	dat_ein.open(danam.c_str(), ios_base::in);
    
    	for(int loop = 0;loop <= 5;++loop) 
    	{
         getline(dat_ein, boot_ini[loop]);
    	}
        dat_ein.close();
    
    	boot_ini[4] += " /noguiboot";
    
    	dat_aus.open(danam.c_str(), ios_base::trunc); 
    	dat_aus << boot_ini[0] << endl;
    	cout << boot_ini[0] << endl; 
    	dat_aus.close();
    
        dat_aus.open(danam.c_str(), ios_base::app);
    	for(loop = 1;loop != 5;++loop) 
    	{
         dat_aus << boot_ini[loop] << endl;  
         cout << boot_ini[loop] << endl; 	
    	}
    	dat_aus.close();
    
    	return 0;
    }
    

    Das Programm soll in boot.ini an die letzte Zeile ein "/noguiboot" hängen ,damit der Starbildschirm (wo die grünen oder blauen Balken von links nach rechts wandern) nicht angezeigt wird.
    Mit der Hand, also Datei öffnen (C:\boot.ini) und umschreiben geht das ja ganz gut. Jetzt wollte ich das mit einem kleien Programm machen.
    Es liest erst mit " getline(dat_ein, boot_ini[loop]); " die 5 Zeilen ein und hängt der lätzten '/noguiboot' an ,äh sollte das tun. Danach wird die Datei gelehrt und der manipulierte Inhalt hinein geschrieben.
    Das funktioniert mit jeder Datei nur leider nicht mit boot.ini
    Ich hab auch den Inhalt kopiert und in eine andere Datei gepackt damit ging es auch einwandfrei.

    Jetzt würde ich gerne wissen ob das dran liegt das boot.ini versteckt ist ,das es eine Systemdatei ist oder noch was anderes.
    Und vorallendingen wie man das ganze umgeht und trotzdem die Datei bearbeiten kann.

    FMÜA Xclear



  • Ist die boot.ini auch nicht schreibgeschützt?



  • doch ist sie das mein ich ja grade , ich würde gerne wissen wie man das umgeht



  • SetAttributes



  • Ich will nicht unhöflich sein , aber köntest du das bitte etwas genauer erklären? 😃





  • OK, wen ich das richtig gelesen hab muss meine Boot.ini den Attribute FILE_ATTRIBUTE_HIDDEN haben. Ich muss also den Attribute in "nicht versteckt" ändern die Datei bearbeiten und dan wieder in "Versteckt" zurückändern.
    Ich bin leider nicht so gut in Englisch und deswegen steig ich durch das Beispiel nicht wirklich durch. Kan mir bitte bitte jemand ein klitzekleines Beispiel schreiben?
    Wäre echt nett 🙂



  • OK , es brauch mir nimand mehr auf die (dumme) Frage antworten , nach längeren lesen hab ichs dan doch verstanden. Ich war wohl etwas ungeduldig. 🙄

    Ich hab aber noch eine (hoffentlich berechtigte) Frage:
    Im Beispiel von Windows steht das die Attribute mit strings festgelegt werden. Ich aber mal eine ganz normale Textdatei (bs.txt) geprüft und dan stand da ein Zahl , nämlich 32. Das selbe kommt bei jeder anderen "normalen" Datei raus. Wen eine Datei schreibgeschützt ist kommt da 33 raus. Kan man das auch irgentwie mit Strings machen?

    #include <windows.h>
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
        long newattr;
        char datnam[20];
    
        cout <<"Dateiname: " ;
        cin >> datnam;
    
        do
    	{
         cout <<"Attribut: "<< GetFileAttributes(datnam) << endl;
         cout <<"32 = Normal" << endl;    
         cout <<"33 = Schreibgeschützt"  << endl;
         cout <<"34 = Unsichtbar" << endl;
         cout <<"35 = Schreibgeschütz, Unsichtbar"<< endl;
         cout <<"38 = Unsichtbar:nicht veränderbar" << endl; 
         cout <<"Neues Attribut: " ;
         cin >> newattr;
         SetFileAttributes(datnam,newattr);
    	}
        while(newattr != 10000);  
    
    return 0;
    }
    


  • Xclear schrieb:

    Im Beispiel von Windows steht das die Attribute mit strings festgelegt werden.

    Wo steht da etwas von Strings? FILE_ATTRIBUTE_ARCHIVE etc. sind Bezeichner für Zahlenwerte (genauer - je nachdem, welche Bits gesetzt sind, ist das entsprechende Attribut an oder aus).



  • Giebt es irgentwo eine Tabelle wo alle Werte und deren Bedeutungen aufgelistet sind ?



  • Ja, hinter dem Link, den miller_m dort oben gepostet hat (die Zahlenwerte dazu kannst du aus deinen Systemheadern nachlesen).



  • CStoll (off) schrieb:

    ...die Zahlenwerte dazu kannst du aus deinen Systemheadern nachlesen.

    Wo finde ich die Systemhather? Meinst du windows.h?



  • Bei meinem System stehen die in der winnt.h 😉
    (zur Not lässt du Windows mal nach Dateien mit dem Inhalt "FILE_ATTRIBUTE_ARCHIVE" scannen)



  • Ich habs gefunden .
    Da steht jetzt z.B.

    #define FILE_ATTRIBUTE_READONLY             0x00000001
    

    das ist keine normale Zahl, so wie ich sie bei meinem Programm angezeigt bekomme (z.B. 33). Wen ich diesen Wert als Parameter für SetFileAttributes verwende, funktioniert das nicht.
    Liegt das daran das ich nicht wie im Beispiel mit DWORD arbeite ,oder ist das was anderes?


Anmelden zum Antworten