簡體   English   中英

為什么空格會出現在C#TextWriter文件的末尾?

[英]Why does whitespace appear at the end of my C# TextWriter file?

我已經使用TextWriter C#創建了一個文本文件,最終創建時,該文本文件通常在文件末尾具有多行空白。 空格不包含在組成文件的任何字符串對象中,我也不知道是什么原因引起的。 文件越大,空格越多。

我已經嘗試了各種測試,以查看是否基於字符串的內容出現空白,但這不是事實。 即我已經確定了空格開始的行數,並為完全不同的東西更改了字符串,但是空格仍然存在。

//To start:
MemoryStream memoryStream = new MemoryStream();
TextWriter tw = new StreamWriter(memoryStream);

//Loop through records & create a concatenated string object
string strUTL1 = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}", strUTL1_1, strUTL1_2, strUTL1_3, strUTL1_4, strUTL1_5, strUTL1_6, strUTL1_7, strUTL1_8);

//Add the line to the text file
tw.WriteLine(strUTL1);

//Once all rows are added I complete the file
tw.Flush();
tw.Close();


//Then return the file
return File(memoryStream.GetBuffer(), "text/plain", txtFileName);

我不想在完成后操作文件(例如,替換空格),因為這可能導致其他問題。 該文件將與第三方交換,並且需要正確格式化。

謝謝您的幫助。

正如MemoryStream.GetBuffer的文檔所述

請注意,緩沖區包含分配的字節,這些字節可能未使用。 例如,如果將字符串“ test”寫入MemoryStream對象,則從GetBuffer返回的緩沖區的長度為256,而不是4,未使用252個字節。 要僅獲取緩沖區中的數據,請使用ToArray方法。 但是,ToArray會在內存中創建數據的副本。

使用.ToArray() (它將分配一個合適大小的新數組),或者您可以使用從.GetBuffer()返回的緩沖區,但是您需要檢查.Length以查看其中有多少個有效字節。

GetBuffer()返回所有已分配的內存,幾乎總是比實際寫入的字節更多。

可能我建議改用Encoding.UTF8.GetBytes(...)

string strUTL1 = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}", strUTL1_1, strUTL1_2, strUTL1_3, strUTL1_4, strUTL1_5, strUTL1_6, strUTL1_7, strUTL1_8);

var bytes = Encoding.UTF8.GetBytes(strUTL1);

return File(bytes, "text/plain", txtFileName);

使用ToArray()而不是GetBuffer() ,因為緩沖區大於所需的緩沖區。

通常就是這種情況。 與緩沖區一起使用的類或函數通常會保留一定大小的內存來保存數據。 然后,該函數將返回一個值,即已將多少字節寫入緩沖區。 然后,您只能使用緩沖區的前n個字節。

MSDN的引用:

例如,如果將字符串“ test”寫入MemoryStream對象,則從GetBuffer()返回的緩沖區的長度為256,而不是4,未使用252個字節。 要僅獲取緩沖區中的數據,請使用ToArray()方法; 但是,ToArray()在內存中創建數據的副本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM