我有以下代碼:MemoryStream的輸出到文件C#
string fileName = GetFileName();
using (var stream = new MemoryStream())
{
using (var sw = new StreamWriter(stream))
{
for (int i = 0; i < 20; i++)
{
sw.WriteLine(String.Format("{0};{1};{2};{3};{4};{5}", i.ToString(), (i*2).ToString(), "-_-_-", "-_" + i.ToString() + "_-", "3", "15"));
}
// Check if compression needed.
if (stream.Length > limit)
{
sw.Flush();
stream.Position = 0;
using (Ionic.Zip.ZipFile zipFile = new Ionic.Zip.ZipFile())
{
absoluteFileName = Path.GetFileName(fileName);
zipFile.AddEntry(absoluteFileName, stream);
zipFileName = Path.Combine(Path.GetDirectoryName(fileName), Path.ChangeExtension(absoluteFileName, ZipExtension));
zipFile.Save(zipFileName);
}
}
else
{
// no compression needed
using (FileStream file = new FileStream(fileName, FileMode.Create, System.IO.FileAccess.Write))
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, (int)stream.Length);
file.Write(bytes, 0, bytes.Length);
//stream.Close();
}
}
}
我試圖產生的情況下的MemoryStream長度的純文本文件(以字節爲單位)的不超過字節的具體量(限制時(見條件)。
如果MemoryStream的長度不是字節的具體金額,然後創建一個壓縮文件越大。
我的問題是在別人的身體時,我嘗試寫內存流的所有內容成無需壓縮的純文本文件(stream.Length < =限制)。我得到一個39字節的文件,但是當我打開它時,它是空的,只有新的行。
我這樣做是因爲我不想直接在磁盤上創建文件,以防需要壓縮它。因此,如果最後不需要壓縮,我會將所有流內存寫入一個文件,這就是問題所在,文件是空的,只有換行符。
我在做什麼錯?
UPDATE2 我已經把下面的行之前的條件:
sw.Flush();
stream.Position = 0;
而現在的內容被寫入文件。
請把更多的精力投入到今後格式化你的代碼。這次我爲你做了這件事,但確實有責任讓代碼儘可能可讀。使用預覽並問問你自己是否真的想要閱讀代碼。 –
@JonSkeet好的,謝謝。 – user1624552
「else」分支中的'stream.Position = 0;'在哪裏? –