2014-02-25 53 views
0

我想從服務器下載並保存Zip文件。從Windows Phone 8中的服務器下載Zip文件

我有服務器的字符串。

lastStatusCode = response.StatusCode; 

using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream())) 
{ 
    string result = httpWebStreamReader.ReadToEnd(); 
    RequestList[0].OnResponse(result, lastStatusCode); 
} 

如果 「lastStatusCode」 是OK的話,我想提出的Zip文件。

public async void saveFile(string response) 
{ 

    var fileBytes = System.Text.Encoding.UTF8.GetBytes(response.ToCharArray()); 

    // Get the local folder. 
    StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder; 

    // Create a new folder name MyFolder. 
    var dataFolder = await local.CreateFolderAsync("TestFolder", 
     CreationCollisionOption.OpenIfExists); 

    // Create a new file named DataFile.txt. 
    var file = await dataFolder.CreateFileAsync("File.zip", 
    CreationCollisionOption.ReplaceExisting); 

    // Write the data from the textbox. 
    using (var s = await file.OpenStreamForWriteAsync()) 
    { 
     s.Write(fileBytes, 0, fileBytes.Length); 
    } 
} 

我做錯了什麼?我無法打開這個文件。

回答

0

我修復了這個問題!將Stream轉換爲String,然後將String轉換爲Byte不是個好主意。

我轉換到流字節:

lock (RequestList) 
      { 
       //WebRequest request = (WebRequest)callbackResult.AsyncState; 
       HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState; 
       try 
       { 
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult); 


        Stream s = response.GetResponseStream(); 

        lastStatusCode = response.StatusCode; 
        s.Position = 0; 

        // Now read s into a byte buffer with a little padding. 
        byte[] bytes = new byte[s.Length]; 
        int numBytesToRead = (int)s.Length; 
        int numBytesRead = 0; 
        do 
        { 
         // Read may return anything from 0 to 10. 
         int n = s.Read(bytes, numBytesRead, numBytesToRead); 
         numBytesRead += n; 
         numBytesToRead -= n; 
        } while (numBytesToRead > 0); 
        s.Close(); 
        WriteFile("Test.zip",bytes); 
        RequestList[0].OnResponse(bytes, lastStatusCode); 

       } 
       catch (WebException e) 
       { 
        Debug.WriteLine("Error : " + e.Message); 
        byte[] streamData = System.Text.Encoding.UTF8.GetBytes(e.Message); 
        RequestList[0].OnResponse(streamData, HttpStatusCode.InternalServerError); 
       } 
      } 
這裏

我正在zip文件

public async void WriteFile(string fileName, byte[] response) 
{ 

    IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder; 

    IStorageFile storageFile = await applicationFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting); 
    //var content = System.Text.Encoding.UTF8.GetBytes(response); 

    using (Stream stream = await storageFile.OpenStreamForWriteAsync()) 
    { 
     await stream.WriteAsync(response, 0, response.Length); 
    } 
}