2014-04-25 169 views
1

我正在使用JSON從網上下載文件。我現在想將文件保存到設備(我已經完成),但是每次運行應用程序時,我都會再次保存文件。儘管它已經存在。覆蓋現有文件

如何修改我下面的代碼,以便它不會使文件的一個新副本如果在使用相同的名稱保存位置已經發現了什麼?

IEnumerator Start() 
{ 
    WWW urlToLoad = new WWW(url); 
    yield return urlToLoad; 
    Debug.Log(urlToLoad.text); 

    jsonContents = urlToLoad.text; 
    var n = JSON.Parse(jsonContents); 
    jsonURL = n["data"][0]; 
    Debug.Log(jsonURL.ToString()); 


    string[] splitJSONURL = jsonURL.Split('/'); 
    string bundle = splitJSONURL[splitJSONURL.Length - 1]; 
    SaveBytesAsFile(Application.persistentDataPath + "/" + bundle, urlToLoad.bytes); 

} 

void SaveBytesAsFile(string filePath, byte[] array) 
{ 
    print("Saving to: " + filePath + " :: " + array.Length); 

    File.WriteAllBytes(filePath, array); 
} 
+1

檢查文件是否存在,如果是這樣,新的文件名 –

+0

你問如何使文件覆蓋現有的保存呢?這段代碼應該已經這樣做了,除非'bundle'每次都不一樣。如果你問如何讓它不被覆蓋,那麼看看已經給出的答案。 – Bobson

回答

2

檢查文件是否存在。如果沒有,請創建它:

if (!File.Exists(filePath)) 
{ 
    File.WriteAllBytes(filePath, array); 
} 
else 
{ 
    // do some magic, create an other file name or give an error 
} 
+0

這不是原子操作,所以如果您使用的是網絡共享,如果共享聯機並且許多節點正在調用此代碼,則可能會失敗。換句話說,不要在網絡農場中這樣做。我建議使用流媒體對象,它可以讓你選擇創建/覆蓋。 – Brain2000

1

我傾向於檢查文件是否存在,如果是這樣我的日期附加到文件名,你可以輕鬆地跳過寫入文件,以及:

// With a new filename: 
if (File.Exists(filePath)) 
{ 
    File.WriteAllBytes(filepath + "-" + DateTime.Now.ToString("yyyy-MM-dd-hhmm") + ".txt", array); 
} 

// To skip writing the file all together, follow @PatrickHofman's answer. 

理想情況下,如果要保存所有文件,則您的文件命名模式應包含此可能性。

您可能也想,如果它需要你保留所有的數據,如數據庫尋找到一個存檔過程。這樣,當你覆蓋文件時你什麼都不會丟失,並且如果需要的話可以很容易地替換數據。