标签: streamwriter

C# 为什么 StreamWriter 每次写入文件后都会写入空行?

我知道这有点像“第一天”问题,但我仍然无法理解为什么我的 Stream writer 每次写入后都会写空行

namespace PostFinder
{
    class HistorySaver
    {
        public static void Save(string item, string path)
        {
            StreamReader sre = new StreamReader(path);
            string historyList = sre.ReadToEnd();
            sre.Dispose();
            StreamWriter sr = new StreamWriter(path);
            sr.WriteLine(historyList+sr.NewLine+item);
            sr.Dispose();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c# streamwriter

0
推荐指数
1
解决办法
3249
查看次数

利用流写入器 WriteLineAsync 和 WhenAll 是否正确

我有一段代码以异步方式写入内存流(.NET Standard 2.1)

  • 创建热任务列表,每行一个
  • 然后等待全部完成
  • 最后将写入器缓冲区刷新到内存流

代码:

await using var memoryStream = new MemoryStream();
await using var writer = new StreamWriter(memoryStream);

var recordTasks = stringRecordsToWrite.Select(r => writer.WriteLineAsync(r));

await Task.WhenAll(recordTasks);

await writer.FlushAsync();

var result = memoryStream.ToArray();
Run Code Online (Sandbox Code Playgroud)

问题

有几个问题困扰着我:

  1. 有报道称,一些记录有时会被跳过。因此,我想知道这样的实施是否是根本原因。我尝试在本地重现该问题,但不幸的是没有成功
  2. Resharper 还强调,“writer”(在 SELECT 语句内)是一个捕获的变量,并在外部作用域中进行处理。这会是一个问题吗?

或者那些都是假痕迹,而且实现得很好,我应该尝试在其他地方找到原因

Ps代码片段,用于尝试重现该问题,但是,结果文件大小约为 250 MB,并且仍然没有该问题的证据......

 internal class Program
    {
        public static async Task Main(string[] args)
        {
            var records = new Dictionary<string, IEnumerable<RecordsToWrite>>();

            for (var i = 0; i < 200; i++)
            {
                var recordKey = $"test-{i}";

                records.Add(recordKey, default); …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous streamwriter async-await

0
推荐指数
1
解决办法
491
查看次数

StreamWriter的Visual Studio bug还是我的误会?

我必须处理一些包含西里尔文本的文件,我在Visual Studio 2012 Ultimate中使用StreamReader/ StreamWriter.

然而,有一些荒谬的问题(或我的误解).以下构造函数工作得很好:

using (StreamReader reader = new StreamReader(someFile, Encoding.Default)){
}
Run Code Online (Sandbox Code Playgroud)

然而,当我尝试以下内容时:

using (StreamWriter writer = new StreamWriter(someOtherfile, Encoding.Default)){
}
Run Code Online (Sandbox Code Playgroud)

我得到一个ivalid构造函数的编译时错误.然而,以下是MSDN的规范:

public StreamWriter(Stream stream, Encoding encoding);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

c# streamwriter streamreader

-1
推荐指数
1
解决办法
325
查看次数

为什么我对file.WriteLine()的调用无法将StringBuilder的所有内容写入文件?

我正在尝试通过StringBuilder和File.WriteLn()将一个html文件写入磁盘,但该文件缺少几行,因此无用.我的代码是:

    private void BuildAndWriteHTMLFile()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("<!DOCTYPE html>");
    sb.Append("<html lang=\"en\">");
    sb.Append("<head>");
    sb.Append("<meta charset=\"utf-8\">");
    sb.Append("<title>Green Bay Packers 2013 Schedule (All times Central)</title>");
    sb.Append("<script src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js\"></script> ");
    sb.Append("<script src=\"http://maps.google.com/maps/api/js?sensor=false\"></script> ");
    sb.Append("<script src=\"gomap.js\"></script> ");
    sb.Append("<!--[if IE]>");
    sb.Append("<script src=\"http://html5shiv.googlecode.com/svn/trunk/html5.js\"></script>");
    sb.Append("<![endif]-->");

. . . // oodles on noodly code elided for lack of reason to leave it in

    sb.Append("this.singleMarker = false;");
    sb.Append("this.lockGeocode = false;");
    sb.Append("this.markers = [];");
    sb.Append("this.tmpMarkers = [];");
    sb.Append("this.geoMarkers = [];");
    sb.Append("},");

    sb.Append("isVisible: function(latlng) {");
    sb.Append("return this.map.getBounds().contains(latlng);");
    sb.Append("}");
    sb.Append("}");
    sb.Append("})(jQuery);"); …
Run Code Online (Sandbox Code Playgroud)

c# file-io stringbuilder streamwriter

-1
推荐指数
1
解决办法
144
查看次数

StreamWriter不写所有字符

当人们关闭游戏以保存所有他们当前选择的宠物时,我会运行这些代码(这是为了学校不要担心我如何将其命名为"Squirtle",这里没有版权问题).有问题的代码是:

using (StreamWriter sw = File.CreateText(@"..\..\pets.txt"))
{
    sw.AutoFlush = true;
    foreach (Pet p in petList)
    {
        sw.Write(p.PetID + ' ');
        sw.Write(p.Name + ' ');
        sw.Write(p.HP + ' ');
        sw.Write(p.Type + ' ');
        sw.Write(p.Level + ' '  );
        sw.Write(p.Rarity + ' ');
        sw.WriteLine(p.Speed);                               
    }
}
Run Code Online (Sandbox Code Playgroud)

逗号是空格,我只是添加了autoflush来尝试解决问题,但基本上无论我运行多少次,前两个,后两个和最后3个数据之间都没有空格,例如:32SQUIRTLE 77AQUATIC 41930.每次我运行时都会发生这种情况,并且想知道是否有人知道它为什么会这样做?如果使用StreamWriter或其他东西的空间和逗号臭名昭着,我也可以使用任何分隔符.

c# streamwriter

-2
推荐指数
1
解决办法
195
查看次数

保存到文件损坏 - C#

我尝试使用txt文件作为备份:当激活复选框时,我们在“胜利”txt文件中添加1,当它被停用时,我们在“松散”txt文件中添加1,这是我的问题:\例如,如果禁用该复选框,我运行脚本,在“宽松”中得到 1,在“胜利”中得到 0,所以很正常;但如果我再次运行它(不改变任何东西),我在“宽松”中得到 51,在“胜利”中得到 49,但我想得到 2 和 0..\n我不知道它是否真的很清楚;

\n

这是一段代码:

\n
if (Directory.Exists("C:/PekmiIndustries/BrokenGame"))\n{\n    TextReader VtxtR = new StreamReader("C:/PekmiIndustries/BrokenGame/Victory.txt");\n    TempVReadStr = VtxtR.Read().ToString();\n    VRead = Convert.ToInt32(TempVReadStr);\n    VRead += 1;\n    if (VictoireCheck.Checked == true)\n    {\n        VRead += 1;\n    }\n    VtxtR.Close();\n    TextWriter VtxtW = new StreamWriter("C:/PekmiIndustries/BrokenGame/Victory.txt");\n    VtxtW.Write(VRead.ToString());\n    VtxtW.Close();\n\n    TextReader LtxtR = new StreamReader("C:/PekmiIndustries/BrokenGame/Loose.txt");\n    TempLReadStr = LtxtR.Read().ToString();\n    LRead = Convert.ToInt32(TempLReadStr);\n    LRead += 1;\n    if (VictoireCheck.Checked == false)\n    {\n        LRead += 1;\n    }\n    LtxtR.Close();\n    TextWriter LtxtW = new StreamWriter("C:/PekmiIndustries/BrokenGame/Loose.txt");\n    LtxtW.Write(LRead.ToString());\n    LtxtW.Close();\n\n    MessageBox.Show("Les stats ont correctement \xc3\xa9t\xc3\xa9s …
Run Code Online (Sandbox Code Playgroud)

c# streamwriter streamreader

-2
推荐指数
1
解决办法
94
查看次数