Editierbare Dateien



  • Mahlzeit,

    Erst mal den Code

    HIMAGELIST hImgList = NULL;
                SHFILEINFO  info;
                hImgList = (HIMAGELIST) SHGetFileInfo("c:\\datei.???"),
                                   0,
                                   &info,
                                   sizeof(SHFILEINFO),
                                   SHGFI_ICON |
                                   SHGFI_SMALLICON |
                                   SHGFI_DISPLAYNAME |
                                   SHGFI_USEFILEATTRIBUTES |
                                   SHGFI_TYPENAME |
                                   SHGFI_ATTRIBUTES |
                                   );
    

    Mit diesem Code kann ich herrausfinden ob es bei einer Datei um ein HTML, PHP, TXT usw... handelt.

    Wie kann ich aber allgemeiner feststellen, ob die Datei eine mit einem Texteditor editierbare ist?

    Dank im Vorraus



  • Die ersten (40 z.B.) Zeichen der Datei müßen Druckbare Zeichen sein, sind also Werte die nur die Tastatur liefert, sozusagen. Das trifft für .txt, .php, .html, .pl und so zu. (Achtung, auch Steuersequenzen wie \r\n).

    Andere Dateien haben meißt einen Binären Header in dem immer andere Werte mit zum Vorschein kommen.

    gruß



  • Hört sich gut an,
    Danke



  • So habs mal ausprobiert
    etwa so

    char *n = //Inhalt der Datei 40 Zeichen, (mehr oder weniger)
    for (int c=0; c<40; c++){
    if (!isprint(n[c])){
        return false; //Nicht druckbar. also keine Textdatei
    }
    }
    

    Das Resultat ist leider etwas ungenau.
    Mir werden zum Beispiel die eine oder andere Javascript Datei als nicht druckbar ausgegeben, die eine oder andere gif Datei als druckbar.

    Das liegt auch daran, das man in ein Javascript durchauch ein € als String einfügen kann.
    Wenn mein gif-header mit GIF89a anfängt werden alle anderen nicht druckbaren Zeichen beim lesen ausgelassen

    Ich habe schon alle leerzeichen und(\r\n) rausgenommen.
    Gibt es noch andere Methoden?



  • Trulli schrieb:

    ....
    Gibt es noch andere Methoden?

    Ja, anders vergleichen als mit isprint.

    char vergleichstr[] = "\n\r\t€^1234567890abcdefghijklmnopqrstuvwxyzäöü ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ!"§$%&/()=?ß\\´`#',.-;:_~+*<>|°µ@\0";
    

    Nun guckst du in der for schleife ob das jeweilige zeichen in dieser Kette vorkommt


Log in to reply