ゲームのランチャー/アップデーターに取り組んでいます。アップデーターは、サーバー上の 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();
}
}
}
基本的に、これらの文字を読み取ったときに癇癪を起こさないようにする方法はありますか、それともおそらくもっと合理的な方法でこれを行うより良い方法はありますか?
誰でも提供できる洞察に感謝します。