我正在尝试从服务器下载并保存Zip文件。
我有来自服务器的字符串。
lastStatusCode = response.StatusCode;
using (StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream()))
{
string result = httpWebStreamReader.ReadToEnd();
RequestList[0].OnResponse(result, lastStatusCode);
}
如果“lastStatusCode”正常,那么我正在制作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 :(得分:0)
我解决了这个问题!将Stream转换为String然后将String转换为Byte是个坏主意。
我正在将Stream转换为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);
}
}