這將是一個很多事情要解釋,所以我提前道歉,如果我不解釋我在找什麼足夠徹底,如果你需要我澄清任何東西只是問,我會盡我所能。閱讀json文件並根據文件數據下載文件
所以我在C#中製作了一個Minecraft啓動器,並且我已經到了需要下載資源的部分,在資產文件夾中有兩個文件夾索引和對象,現在我將關注索引文件夾。我已經有了啓動器從http://s3.amazonaws.com/Minecraft.Download/indexes/1.7.10.json下載1.7.10.json(我建議下載文件,以便您可以查看整個事情,無需任何帳戶即可下載它。)問題出現在我試圖閱讀1.7.10.json我已經嘗試了所有我能想到的方式,並且我也試着尋找在線閱讀文件的方法,但沒有一個能夠工作。這就是說我可以用這段代碼讀取文件,並對.json文件進行一些編輯。
public void SevenTenAssets()
{
string root = @"C:\SamplePack1";
string Index = (root + "\\.minecraft\\assets\\indexes\\");
using (StreamReader r = new StreamReader(Index + "1.7.10.json"))
{
string json = r.ReadToEnd();
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(json);
DataTable dataTable = dataSet.Tables["objects"];
foreach (DataRow row in dataTable.Rows)
{
Console.WriteLine(row["hash"]);
}
}
}
但是,我不相信我能夠發佈編輯的文件,而不是從mojang擁有的服務器。所以這個方法真的可以使用。
但這不是唯一的問題。說一會兒,我能讀取未經編輯的文件,我仍然需要把每一個散列出來,並將其插入到這個URL http://resources.download.minecraft.net/(散列的前兩個十六進制字符)/(整個散列)以下載與所述散列關聯的文件。希望這個例子會使它更加清晰:
在1.7.10.json文件中,代碼看起來像這樣。
{"objects": {
"realms/lang/de_DE.lang": {
"hash": "729b2c09d5c588787b23127eeda2730f9c039194",
"size": 7784
},
"realms/lang/cy_GB.lang": {
"hash": "7b52463b2df4685d2d82c5d257fd5ec79843d618",
"size": 7688
},
試想一下,有是一個總的文件686點的哈希值,但無論如何,我需要每個敲定因此,例如第一個729b2c09d5c588787b23127eeda2730f9c039194
然後複製每個哈希的前兩個字符和創建一個名爲前兩個字符的文件夾,所以在這個哈希中它將是一個名爲72的文件夾。一旦文件夾在之前提到的對象文件夾中創建,它將需要轉到前面提到的鏈接(我不能再次發佈它在這個因爲我有不到10個聲望,不能發佈超過2個鏈接,但它是鏈接,有resource.download.minecraft不是s3.amazonaws鏈接)
將與所述散列相關聯的文件下載到名爲72的文件夾。 您很可能會看到因下載相關文件而導致的「(散列的前2個十六進制字符)/(整個散列)」部分的URL使用散列需要採用has的前兩個字符,在這種情況下,它是72,然後添加一個/ then以及將下載該文件的整個散列。你可能也會想,我可以把鏈接放在代碼中,而不必閱讀json,但我實際上需要讓它讀取.json文件,因爲它需要與多個版本的.json一起工作(IE:1.7.10 .json,1.8.json等)。 感謝您的幫助提前。
在stackoverflow上, 「鏈式」問題的修正格式是[每個問題一個問題](http://meta.stackexchange.com/questions/39223/one-post-with-multiple-questions-or-multiple-posts)。你有什麼辦法可以把它分解成更多的原子問題嗎? – dbc