2016-04-25 58 views
0

我在这里遇到了一个有关我的游戏更新程序的问题。基本上,它应该做的是解密已经加密的文件,读取它,再次加密并运行游戏。有时它会下载更新,以便它需要下载加密更新,解密已存在于游戏文件夹中的文件,添加更新,再次加密文件,运行游戏。通常,我将不得不创建一个新的解密文件,并在更新时将其放在文件夹中,我希望避免这种情况,并让exe自行完成,而不需要制作任何额外的文件。除了我需要读取解密数据的部分,我还有很长的路要走,但我不知道应该如何读取它(如果没有文件)(并且我想保留它)System.ArgumentOutOfRangeException C#

This是我得到System.ArgumentOutOfRange异常非负数所需。

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; 

任何帮助,将不胜感激。

+1

貌似'f.Start'是使用简单的<0 –

+0

哪里的加密/解密?你可能是指编码/解码?加密/解密是一种使用密钥来提供机密性的加密操作。 –

+0

这是加密/解密公共静态字节[]加密(字节[]字节,串键) { 返回新TripleDESCryptoServiceProvider {答案=新MD5CryptoServiceProvider()。ComputeHash(Encoding.ASCII.GetBytes(键)),模式= CipherMode.ECB,Padding = PaddingMode.PKCS7} .CreateEncryptor()。TransformFinalBlock(bytes,0,bytes.Length); } –

回答

0

那么你想检查文件是否存在?

然后可以根据

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

那么,该文件存在。我得到的问题是它必须阅读的代码。 –

相关问题