【问题标题】:System.IO.File.ReadAllLines returns zero stringsSystem.IO.File.ReadAllLines 返回零字符串
【发布时间】:2014-03-26 06:09:44
【问题描述】:

美好的一天!

我尝试从文件中获取所有行。

案例:我将一些字符串写入文件(一些 WriteClass),然后尝试获取它的所有行。 通过

var lines=System.IO.File.ReadAllLines(fileName,Encoding.Default);

行数==0! 而且我没有任何例外。

它可能是什么?

谢谢!

【问题讨论】:

  • 文件可能是.. ?否则 ReadAllLines 返回至少一个元素..
  • 写入文件时是否刷新?给我们更多的细节,也许写作课?
  • 在执行此代码之前,您能看看文本文件中是否有这些行吗?
  • 文件名是使用绝对路径还是相对路径?
  • 确保在编辑后关闭文件,然后运行程序。编辑时像ms word lock文件之类的软件。

标签: c# file.readalllines


【解决方案1】:

我也遇到了这个问题。我知道这有点麻烦,但最终导致问题的是我的 URI 格式错误。我把它当作一个字符串,我的解析器在读取行之前尽职地检查文件是否存在。

右:

XmlCsvReader reader = new XmlCsvReader(new Uri("file:///C:/Users/Z/Documents/test.csv"), doc.NameTable);

错误:

XmlCsvReader reader = new XmlCsvReader(new Uri("C:\\Users\\Z\\Documents\\test.csv"), doc.NameTable);

由于 URI 永远不会有效,“行”永远不会被初始化。我猜你的问题可能就是这种情况。解析器示例如下。

            if (File.Exists(location.AbsolutePath))
        { //this will never run if the URI is formatted wrong
          //The file will never be found

            lines = File.ReadAllLines(location.AbsolutePath);
            Console.WriteLine(lines);
            index = 0;
            column = 0;
            depth = 0;
            tag = 0;
            rs = ReadState.Initial;
        }

【讨论】:

  • 一开始就不要调用 File.Exists()。如果失败,只需尝试打开文件并处理异常。无论如何,您都需要异常处理程序,因为文件系统是易变的(当您检查 Exists() 并尝试使用该文件时,状态可能会发生变化)并且因为 File.Exists() 不考虑权限或锁定之类的事情。一旦有了异常处理程序,File.Exists() 就会变得非常浪费(额外的磁盘行程,这几乎是计算机可以做的最慢的事情)和冗余。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多