我正在为游戏开发启动器/更新器。更新程序从服务器上的 xml 文件中获取数据。到目前为止,我的代码(其中有一些来自其他代码的引用)运行良好。我对其进行了测试,它下载的文件很好,但是,我用来测试它的文件是 jpg 的。启动器需要下载的实际文件是一系列字符,例如: (e}xP7,iIlM7Q8=&@vR2-sv~]9.5 下载这些文件时每次都会抛出异常。我对 C# 不是很好所以我想我会在我总能找到答案的地方寻求帮助。;)
我的 XML 示例:
<theupdates>
<update>
<version>1.1</version>
<file>(e}xP7,iIlM7Q8=&@vR2-sv~]9.5.$}t]8</file>
<path>http://test.m-containers.com/Updates/</path>
</update>
<update>
<version>1.1</version>
<file>;V;xP,S]PXKr8;{(8HO2NJ H-g;PAo_yTuIV</file>
<path>http://test.m-containers.com/Updates/</path>
</update>
<update>
<version>1.1</version>
<file>^_HZpQ;Xpi{QS`Ku,}@#B}JYW}Q+;gdO0</file>
<path>http://test.m-containers.com/Updates/</path>
</update>
<update>
<version>1.1</version>
<file>{G'A4l7O8]~nb(a!mrK5hE)o</file>
<path>http://test.m-containers.com/Updates/</path>
</update>
</theupdates>
我的 C# 代码示例:
string Root = AppDomain.CurrentDomain.BaseDirectory;
XDocument serverXml = XDocument.Load(@"http://test.m-containers.com/Updates/Updates.xml");
foreach (XElement update in serverXml.Descendants("update"))
{
string version = update.Element("version").Value;
string file = update.Element("file").Value;
string path = update.Element("path").Value;
string sUrlToReadFileFrom = path + "V" + version + "/" + file;
string sFilePathToWriteFileTo = Root + "\\Resource\\" + file;
Uri url = new Uri(sUrlToReadFileFrom);
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
response.Close();
Int64 iSize = response.ContentLength;
Int64 iRunningByteTotal = 0;
using (System.Net.WebClient client = new System.Net.WebClient())
{
using (System.IO.Stream streamRemote = client.OpenRead(new Uri(sUrlToReadFileFrom)))
{
using (Stream streamLocal = new FileStream(sFilePathToWriteFileTo, FileMode.Create, FileAccess.Write, FileShare.None))
{
int iByteSize = 0;
byte[] byteBuffer = new byte[iSize];
while ((iByteSize = streamRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
{
streamLocal.Write(byteBuffer, 0, iByteSize);
iRunningByteTotal += iByteSize;
double dIndex = (double)(iRunningByteTotal);
double dTotal = (double)byteBuffer.Length;
double dProgressPercentage = (dIndex / dTotal);
int iProgressPercentage = (int)(dProgressPercentage * 100);
Downloader.ReportProgress(iProgressPercentage);
}
streamLocal.Close();
}
streamRemote.Close();
}
}
}
有没有办法让它,基本上,当它读到这些字符时不会发脾气,或者可能更合理,一个更好的方法来解决这个问题?
我感谢任何人可以提供的任何见解。