我在这里遇到了一个与我的游戏更新者有关的问题。基本上,它应该做的是解密已经加密的文件,读取它,再次加密并运行游戏。有时会下载更新,为此需要下载加密更新,解密游戏文件夹中已有的文件,添加更新,再次加密文件,运行游戏。通常我必须制作一个新的解密文件,并在更新时将其放在文件夹中,我想避免这种情况并让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;
任何帮助将不胜感激。
答案 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
}