System.ArgumentOutOfRangeException C#

时间:2016-04-25 12:12:36

标签: c# encryption cryptography md5

我在这里遇到了一个与我的游戏更新者有关的问题。基本上,它应该做的是解密已经加密的文件,读取它,再次加密并运行游戏。有时会下载更新,为此需要下载加密更新,解密游戏文件夹中已有的文件,添加更新,再次加密文件,运行游戏。通常我必须制作一个新的解密文件,并在更新时将其放在文件夹中,我想避免这种情况并让exe自己完成所有操作,而不需要任何额外的文件。我走得很远,除了我来到需要读取解密数据的部分,但我不知道如果那里没有文件它应该如何读取它(我想保持这种方式)

这是我得到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 个答案:

答案 0 :(得分:0)

所以你想检查文件存在吗?

然后你可以使用简单的IF

  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
}