Feedback

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

Veröffentlicht von am 03.05.2009
(1 Bewertungen)
In Anlehnung an http://dotnet-snippets.de/dns/pruefen-ob-datei-eine-exe-datei-ist-SID539.aspx
GFU-Schulungen  [Anzeige]

C# Aufbaukurs

Sie haben grundlegende .NET- und C#-Kenntnisse und und wollen diese nun erweitern. Der Aufbaukurs C# führt Sie ein die Arbeit mit Interfaces und Delegates, Generics und Parallel Computing.

JavaScript für .NET-Entwickler

Sie sind .NET-Entwickler und nun stehen Sie vor der Aufgabe, JavaScript in Ihre Arbeit einzubinden. Die Schulung vermittelt Ihnen die JavaScript Grundlagen und die Funktionen der Scriptsprache. Sie wissen, wie objektorientierte Programmierung in JavaScript funktioniert und lernen abschließend Best Practicies Fälle kennen.

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 05.05.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 06.05.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 07.05.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!