Feedback

C# - Prüfen ob eine Datei eine EXE ist

Veröffentlicht von am 5/3/2009
(1 Bewertungen)
In Anlehnung an http://dotnet-snippets.de/dns/pruefen-ob-datei-eine-exe-datei-ist-SID539.aspx
public Boolean IsExecuteable(String aFileName)
        {
            if (File.Exists(aFileName))
            {
                try
                {
                    FileStream FS = new FileStream(aFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
                    Byte[] Data = new Byte[4];
                    FS.Seek(128, SeekOrigin.Begin);
                    FS.Read(Data, 0, 5);
                    FS.Close();

                    if ((Data[0] == 80) & (Data[1] == 69) & (Data[2] == 0) & (Data[3] == 0) & (Data[4] == 76))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                catch
                {
                    return false;
                }
            }
            else
            {
                return false;
            }
        }
Abgelegt unter Executeable, EXE, PE, Ausführbare Datei.

3 Kommentare zum Snippet

Schork schrieb am 5/5/2009:
So wie ich das sehe gibt es in diesem Script eine kleinen Fehler. Das Array Data wird mit vier Elementen erzeugt jedoch mit fünf Elementen befüllt. Das passt nicht. Die Zeile 8 müsste wie folgt lauten:
Byte[] Data = new Byte[5];
Michael Rummel schrieb am 5/6/2009:
Code sollte bezüglich des Arrays richtig sein.
0 - basiertes Array.
Bei 5 Inhalten ist das 0-4 also byte[4]

Man könnte das Snippet noch etwas erweitern um unnötig exception auslösen zu verhindern.
Gate schrieb am 5/7/2009:
Nein, Schork hat recht, dass ist ein Fehler und du sagst es in deinem Kommentar auch auch selbst: "Bei 5 Inhalten ist das 0-4 also byte[4]" 5 Inhalte -> reserviert für 4 mit byte[4], womit das Array von 0 - 3 reicht.
Desweiteren würde ich das Snippet auch noch ändern zu:

return (Data[0] == 80) & (Data[1] == 69) & (Data[2] == 0) & (Data[3] == 0) & (Data[4] == 76);

Ist kompakter.
 

Logge dich ein, um hier zu kommentieren!