我知道这有点像“第一天”问题,但我仍然无法理解为什么我的 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) 我有一段代码以异步方式写入内存流(.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)
问题
有几个问题困扰着我:
或者那些都是假痕迹,而且实现得很好,我应该尝试在其他地方找到原因
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) 我必须处理一些包含西里尔文本的文件,我在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)
我究竟做错了什么?
我正在尝试通过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) 当人们关闭游戏以保存所有他们当前选择的宠物时,我会运行这些代码(这是为了学校不要担心我如何将其命名为"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或其他东西的空间和逗号臭名昭着,我也可以使用任何分隔符.
我尝试使用txt文件作为备份:当激活复选框时,我们在“胜利”txt文件中添加1,当它被停用时,我们在“松散”txt文件中添加1,这是我的问题:\例如,如果禁用该复选框,我运行脚本,在“宽松”中得到 1,在“胜利”中得到 0,所以很正常;但如果我再次运行它(不改变任何东西),我在“宽松”中得到 51,在“胜利”中得到 49,但我想得到 2 和 0..\n我不知道它是否真的很清楚;
\n这是一段代码:
\nif (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)