2016-04-25 10 views
0

Ich bin hier mit einem meiner Spiele-Updater in ein kleines Problem geraten. Grundsätzlich sollte man eine bereits verschlüsselte Datei entschlüsseln, lesen, erneut verschlüsseln und das Spiel starten. Manchmal wird ein Update heruntergeladen, um das verschlüsselte Update herunterzuladen, die bereits im Spielordner befindlichen Dateien zu entschlüsseln, das Update hinzuzufügen, die Dateien erneut zu verschlüsseln und das Spiel zu starten. Normalerweise müsste ich eine neue entschlüsselte Datei erstellen und sie während der Aktualisierung in den Ordner stellen, und das möchte ich vermeiden und die EXE macht alles alleine, ohne dass extra Dateien erstellt werden müssen. Ich kam ziemlich weit, außer ich kam zu dem Teil, wo es die entschlüsselten Daten lesen muss, aber ich weiß nicht, wie es es lesen sollte, wenn es dort keine Datei gibt (und ich will es so behalten)System.ArgumentOutOfRangeException C#

Dies ist, wo ich die System.ArgumentOutOfRange Exception Non Negative Number Required benötigt.

System.ArgumentOutOfRangeException: Non-negative number required. Parameter name: value at System.IO.FileStream.set_Position(Int64 value) at Update.SAH.Write_File(FILE f, SAH patch) in C:\........SAH.cs:line322 


Line 322: 
BinaryReader br = new BinaryReader(File.OpenRead(patch.SAF_Path)); 
      br.BaseStream.Position = (long)f.Start; 
      byte[] file = br.ReadBytes((int)f.Length); 
      br.Dispose(); 
      BinaryWriter bw = new BinaryWriter(File.OpenWrite(SAF_Path)); 
      bw.BaseStream.Position = (int)new FileInfo(SAF_Path).Length; 
      f.Start = (ulong)bw.BaseStream.Position; 
      bw.Write(file); 
      bw.Dispose(); 
      current_folder.Files.Add(f); 

       f.Start = BitConverter.ToUInt64(file, Offset); 
       Offset += 8; 

       f.Length = BitConverter.ToUInt64(file, Offset); 
       Offset += 8; 

Jede Hilfe wäre willkommen.

+1

Sieht aus wie 'f.Start' ist <0 –

+0

Wo ist die Verschlüsselung/Entschlüsselung? Meinst du vielleicht Kodierung/Dekodierung? Verschlüsselung/Entschlüsselung ist eine kryptografische Operation, die einen Schlüssel verwendet, um Vertraulichkeit zu gewährleisten. –

+0

Dies ist das öffentliche/statische Entschlüsselungs-Byte [] Encrypt (byte [] Bytes, String-Schlüssel) { return new TripleDESCryptoServiceProvider {Schlüssel = new MD5CryptoServiceProvider(). ComputeHash (Encoding.ASCII.GetBytes (key)), Mode = CipherMode.ECB, Padding = PaddingMode.PKCS7} .CreateEncryptor(). TransformFinalBlock (Bytes, 0, Bytes.Länge); } –

Antwort

0

Sie wollen also überprüfen, Datei existiert?

Dann können Sie einfach verwenden, wenn

if(File.Exist(patch.SAF_Path)) 
{ 
BinaryReader br = new BinaryReader(File.OpenRead(patch.SAF_Path)); 
      br.BaseStream.Position = (long)f.Start; 
      byte[] file = br.ReadBytes((int)f.Length); 
      br.Dispose(); 
      BinaryWriter bw = new BinaryWriter(File.OpenWrite(SAF_Path)); 
      bw.BaseStream.Position = (int)new FileInfo(SAF_Path).Length; 
      f.Start = (ulong)bw.BaseStream.Position; 
      bw.Write(file); 
      bw.Dispose(); 
      current_folder.Files.Add(f); 

      f.Start = BitConverter.ToUInt64(file, Offset); 
      Offset += 8; 

      f.Length = BitConverter.ToUInt64(file, Offset); 
      Offset += 8; 
} 
else 
{ 
//do somethings else downloand this file maybe and try read it 
} 
+0

Nun, die Datei existiert. Das Problem, das ich bekomme, ist mit dem Code, den es lesen muss. –