从.txt文件中读取会跳过“\ n”字符

时间:2016-08-18 19:07:09

标签: c# monogame

所以我试图从文本文档中读取并将所有文本用作一个字符串。

我的文本文档包含以下行:

  

000 \ N010 \ n000

我用它来读取文件:

StreamReader reader = new StreamReader("map.txt");
string mapString = reader.ReadToEnd();

然后我使用读取线以Monogame生成地图。我遇到了一个问题,这打破了我的游戏。我认为发生的是,读者读到:

  

000 \ N010 \ n000

作为

  

000010000

因为它在我设置

时有效
string mapString = "000\n010\n000";

有没有人知道解决方案/遇到同样的问题?

2 个答案:

答案 0 :(得分:0)

嗯,我从未见过streamreader跳过换行符(\ n或\ r \ n)

你可以检查你的文件字节是否为字节:

class GetFrom extends AsyncTask <Object,Object,String>{

    @Override
    protected String doInBackground(Object... strings) {
        ....
        String param = anotherMagicalFunctionThatGivesParamToSend(strings[1]);
        for(i = 1; i < websites.length; i++){
            new SendTo.execute(websites[i],param);
        }
    }
}

结果(在正确的文件上):

  var test = File.ReadAllBytes("map.txt");

  if (test.All(b => char.IsNumber((char)b))) throw new Exception("only numbers found!");

  if (!test.Any(b => b == '\n')) throw new Exception("no linebrakes found!");

  Console.WriteLine("--- char stats ---");
  Console.WriteLine();
  Console.WriteLine(string.Join("\r\n", test.GroupBy(c => c).OrderBy(g=>-g.Count()).Select(g => (g.Key < ' ' ? "0x" + g.Key.ToString("x").PadLeft(2,'0') : "   " + (char)g.Key) + " - count: " + g.Count())));

0x0a是十六进制编码的'\ n'

答案 1 :(得分:-1)

感谢评论中的提示,我在轨道上添加了断点,以便在文件设置后检查mapString。

它给了我这个字符串:

mapString = "000\\n010\\n010";

因此,由于某种原因,它在每个“\ n”之前添加了一个额外的“\”。

为了解决这个问题,我使用了一些hacky修复程序并使用了:

String.Replace("\\n", "\n");

感谢您让我走上正轨。