Datei einlesen bzw. bearbeiten

02/28/2019 20:52 {Skrillex}#1
Hallo liebe Community,
bevor ich anfange zu schreiben muss ich sagen, dass ich absoluter anfänger in .NET basierten Sprachen bin.

Ich versuche mich derzeitig an einen Launcher für ein Bereits vorhandenes Spiel.
Dieser soll auch auf Updates prüfen und ggf. auch ein Update durchführen.

Dafür muss ich ja Zugriff auf die Datei mit der Dateiendung ".SAH" haben. Wie bekomme ich es umgesetzt Zugriff auf diese Datei zu erhalten oder sogar diese Auszulesen? Wenn ich den Inhalt einsehen kann wäre das ja schonmal ein guter Großer schritt.
Die Datei Strukturierung sieht wie folgt aus:
Hat jemand eine Idee wie man das ganze umsetzen könnte? Ich bin über jede hilft wirklich froh.

Ich danke für jede Antwort und wünsche einen angenehmen Abend.

Liebe Grüße

Gian-Luca
02/28/2019 22:08 elmarcia#2
Quote:
Originally Posted by .:Unix:. View Post
Hallo liebe Community,
bevor ich anfange zu schreiben muss ich sagen, dass ich absoluter anfänger in .NET basierten Sprachen bin.

Ich versuche mich derzeitig an einen Launcher für ein Bereits vorhandenes Spiel.
Dieser soll auch auf Updates prüfen und ggf. auch ein Update durchführen.

Dafür muss ich ja Zugriff auf die Datei mit der Dateiendung ".SAH" haben. Wie bekomme ich es umgesetzt Zugriff auf diese Datei zu erhalten oder sogar diese Auszulesen? Wenn ich den Inhalt einsehen kann wäre das ja schonmal ein guter Großer schritt.
Die Datei Strukturierung sieht wie folgt aus:
Hat jemand eine Idee wie man das ganze umsetzen könnte? Ich bin über jede hilft wirklich froh.

Ich danke für jede Antwort und wünsche einen angenehmen Abend.

Liebe Grüße

Gian-Luca

I think i could try:

Code:
using System;
using System.IO;


namespace file_reader
{
    class Program
    {
        static void Main(string[] args)
        {
            BinaryReader br;
            try
            {
                
                String path = Path.Combine(Directory.GetCurrentDirectory(), "someFile.sah");
                br = new BinaryReader(new FileStream(path, FileMode.Open));
                //READ 3 BYTES SIGNATURE
                String sig = new String(br.ReadChars(3));
                if (String.Compare(sig, "SAH") != 0) throw new Exception("Is not a valid sah file");
               //READ 8 BYTES LONG VALUE
                long unk1 = br.ReadInt64();
                long nbFiles = br.ReadInt64();
                //READ 40 BYTES CHAR PADDING
                char[] padding = br.ReadChars(40);
                Console.Write("File signature: ");
                Console.WriteLine(sig);
                Console.WriteLine("Unk: {0}\n" +
                                  "nbFiles:{1}", unk1, nbFiles);
                br.Close();
                
                Console.ReadKey();
            }catch(IOException e){
                Console.WriteLine(e.Message);
                Console.ReadKey();
                return;
            }catch (Exception e)
            {

                Console.WriteLine(e.Message);
                Console.ReadKey();
                return;
            }
        }
    }
}
Things to consider
Byte order is Little Endian, that means that a number like 123456789 is 00 00 00 00 07 5B CD 15 in 8 bytes hexadecimal value,
but 15 CD 5B 07 00 00 00 00 in Little Endian order, so make sure your endianness matchs your file.‬
03/08/2019 15:06 SCORNI#3
PHP Code:
            byte[] fileData = System.IO.File.ReadAllBytes(@"C:\pfadzurdatei\test.sah");
            
using (System.IO.MemoryStream ms = new System.IO.MemoryStream(fileData))
            {
                
using (System.IO.BinaryReader br = new System.IO.BinaryReader(ms))
                {
                    
byte[] signature = br.ReadBytes(3);
                    
long unk1 = br.ReadInt64();
                    
long nbFiles = br.ReadInt64();
                    
byte[] padding = br.ReadBytes(40);
                }
            } 
Jenachdem ob dein unk1 und nbFiles 4 byte oder 8byte lang ist musst du ReadInt64 mit long als datentyp oder ReadInt32 mit int als Datentyp verwenden.