Datei öffnen



  • Hi,

    ich hoffe, dass das hier mit reingehört. Wo anders hab ich dafür keinen Platz gefunden.
    Also mein Problem is folgendes.

    Ich muss n Installationsskript mit InstallShield erstellen. N Problem hab ich aba in meinem Skript.
    Ich hab ne *.exe-Datei, in der als Textstring ne Versions- und Revisionsnummer in Klartext drinsteht. Die Datei würd ich aba gern im Textmodus öffnen.
    Einfach umbenennen und dann versuchen zu öffnen geht nich. Scheinbar liegt's dann doch an der Codierung der Datei.
    Hat jemand ne Idee, wie ich also ne *.exe-Datei auf die Art lesbar machen könnte? Bisher hab ich das hier, was allerdings NICHT geht:

    szDestFileName = szTempPath^"XMC.txt";
    
    //Datei umkopieren
      XCopyFile(szSrcFile, szTempPath, COMP_NORMAL);
      MessageBox("Umkopiert", INFORMATION);
    
    //Datei umbenennen
      RenameFile(szTempPath^"XMC.exe", szTempPath^"XMC.txt");
      //MessageBox("Umbenannt", INFORMATION);
    
    //Datei auswerten
      OpenFileMode(FILE_MODE_NORMAL);
      if(OpenFile(nvFileHandle, szTempPath, szDestFileName) < 0) then
        MessageBox("Datei konnte nich geöffnet werden", SEVERE);
        bFound = TRUE;
      endif;
      while(!bFound)
        if(GetLine(nvFileHandle, szFound) < 0) then
          //Fehler beim Lesen
          bFound = TRUE;
          NumToStr(svTempString, i); //Zeilennummer der gefundenen Zeile (bei Fehler 0)
          MessageBoxEx(szSearchForVersion, svTempString, SEVERE);
          MessageBox(szFound, WARNING); //gefundener Text in der Zeile (bei Fehler leer, da GetLine nix zugewiesen hat)
        else
          //Lesen erfolgreich
          if(StrFindEx(szFound, szSearchForVersion, 0) >= 0) then
            //Versionsstring wurde gefunden
            NumToStr(svTempString, i);
            MessageBoxEx(szSearchForVersion, svTempString, SEVERE);
            MessageBoxEx(szFound, "Gefundene Zeile", INFORMATION);
            bFound = TRUE;
          endif;
        endif;
        i++;
      endwhile;
      CloseFile(nvFileHandle);
    
    //Verzeichnis löschen
      DeleteDir(szTempPath, ALLCONTENTS);
      MessageBox("Verzeichnis gelöscht", INFORMATION);
    

    Wenn ich mit meiner Datei-auswerten-Routine ne bestehende *.txt öffne, funktioniert es. Die umbenannte *.exe in eine *.txt führt in der Funktion GetLine(...) zu einem Fehler. Das Programm läuft dann zwar weiter, nur ich weiß noch immer nicht, ob überhaupt ne Versionsangabe in der Datei drin is.

    Hoffe, ihr könnt mir helfen.

    LG
    Anti



  • In C hängt es normalerweise nicht vom Namen ab, wie die Datei geöffnet wird, sondern vom angegebenen Dateimodus (fopen() und iostreams öffnen die Dateien standardmäßig im Textmodus, mit "..b" bzw. ios::binary kannst du auf Binärmodus umstellen). Wo man das bei deiner Bibliothek umstellen kann, mußt du mal nachschlagen - vermutlich beim OpenFileMode()-Aufruf.

    (PS: Eventuell würde es schon weiterhelfen, wenn du dazusagst, WELCHE Fehlermeldung kommt)


Anmelden zum Antworten