我有这段代码:
string s = "آ";
StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8);
writer.WriteLine(s);
但是当我运行它时,我在a.txt中看不到任何“آ”!! a.txt中没有任何字符串!它是空的!有什么问题!?!谁能帮我???
答案 0 :(得分:31)
您永远不会Close()
StreamWriter
。
如果你在写完后给writer.Close()
打电话,你会看到这个角色。
但是,因为它实现了IDisposable
,所以你应该在StreamWriter
语句中包含using
的创建:
using(StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8))
{
writer.WriteLine(s);
}
这会关闭你的流。
答案 1 :(得分:5)
根据它的外观,在结束申请之前,你不是Flush()
或Close()
StreamWriter
。 StreamWriter
在内部使用缓冲区,在关闭应用程序之前需要刷新,或者StreamWriter
超出范围,否则您写入的数据将不会写入光盘。
您可以在完成后致电Close()
- 但我建议您使用using
语句,以确保您的StreamWriter
得到妥善处置。
string s = "آ";
using (StreamWriter writer = new StreamWriter("a.txt", false, Encoding.UTF8))
{
writer.WriteLine(s);
}
答案 2 :(得分:3)
尝试使用File.WriteAllText("a.txt", s, Encoding.UTF8);
。
答案 3 :(得分:0)
几点提示:
答案 4 :(得分:0)
关注,完成导出列表视图的功能,以正确的特殊字符表示:
private void Exportar()
{
Encoding encoding = Encoding.UTF8;
saveFileDialog1.Filter = "Arquivo Excel (*.xls)|*.xls";
saveFileDialog1.FileName = "logs";
saveFileDialog1.Title = "Exportar para Excel";
StringBuilder sb = new StringBuilder();
foreach (ColumnHeader ch in lstPesquisa.Columns)
{
sb.Append(ch.Text + "\t");
}
sb.AppendLine();
foreach (ListViewItem lvi in lstPesquisa.Items)
{
foreach (ListViewItem.ListViewSubItem lvs in lvi.SubItems)
{
if (lvs.Text.Trim() == string.Empty)
{
sb.Append(" ");
}
else
{
string ITEM = Regex.Replace(lvs.Text, @"\t|\n|\r", "");//remover novas linhas
sb.Append(ITEM + "\t");
}
}
sb.AppendLine();
}
DialogResult dr = saveFileDialog1.ShowDialog();
if (dr == DialogResult.OK)
{
StreamWriter sw = new StreamWriter(saveFileDialog1.FileName, false, Encoding.UTF32);
sw.Write(sb.ToString());
sw.Close();
}
}
答案 5 :(得分:0)
如果要从包含这些Unicode字符的位置读取文件,然后进行一些修改并写回该文件,则会出现问题。我陷入了同样的问题。这是对我有用的解决方案
从包含Unicode字符的文件中读取数据
List<string>fileData= File.ReadAllLines("URPath",Encoding.Default).ToList());
//Any modifications
File.WriteAllLines("URPath", hstFileData,Encoding.Default);
我知道这并不漂亮,但它确实有效。 希望这可以帮助!