Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取第二行并从txt C保存它#_C# - Fatal编程技术网

C# 读取第二行并从txt C保存它#

C# 读取第二行并从txt C保存它#,c#,C#,我要做的是只读取.txt文件中的第二行,并将其保存为字符串,以便稍后在代码中使用 文件名为“SourceSetting”。在第一行和第二行我有一些词 对于第1行,我有以下代码: string Location; StreamReader reader = new StreamReader("SourceSettings.txt"); { Location = reader.ReadLine(); } ofd.InitialDirectory = Location; 这很好,但是我如何使

我要做的是只读取.txt文件中的第二行,并将其保存为字符串,以便稍后在代码中使用

文件名为“SourceSetting”。在第一行和第二行我有一些词

对于第1行,我有以下代码:

string Location;
StreamReader reader = new StreamReader("SourceSettings.txt");
{
    Location = reader.ReadLine();
}
ofd.InitialDirectory = Location;
这很好,但是我如何使它只读取第二行,这样我就可以将它保存为例如:

string Text

更新我的建议是

当你呼叫时,它会将卡雷特移动到下一行。所以在第二次通话中,你们会读到第二行

string Location;
using(var reader = new StreamReader("SourceSettings.txt"))
{
    Location = reader.ReadLine(); // this call will move caret to the begining of 2nd line.
    Text = reader.ReadLine(); //this call will read 2nd line from the file
}
ofd.InitialDirectory = Location;
别忘了

或者举个例子,如果您只需要文件中的一行代码,那么如何实现这个文件类的vi。但是使用
ElementAtOrDefault
的解决方案是最好的,因为Tim Schmelter指出了这一点

var Text = File.ReadLines(@"C:\Projects\info.txt").Skip(1).First()
ReadLines和ReadAllLines方法的区别如下: 在ReadLines中,可以开始枚举字符串集合 全部藏品归还;使用ReadAllLines时,必须 等待返回整个字符串数组,然后才能访问 阵列。因此,当您处理非常大的文件时, 读线可以更高效


因此,与之相比,它不会将所有行读入内存。

可以使用Linq读取该行,如下所示

var SecondLine = File.ReadAllLines("SourceSettings.txt").Skip(1).FirstOrDefault();

您可以不做任何操作而跳过第一行,因此请调用
ReadLine
两次:

string secondLine:
using(var reader = new StreamReader("SourceSettings.txt"))
{
    reader.ReadLine(); // skip
    secondLine = reader.ReadLine();  
}
另一种方法是
文件
类,该类具有以下方便的方法:

由于
ReadLines
也使用流,因此不能先将整个文件加载到内存中进行处理<代码>可枚举。ElementAtOrDefault将只占用第二行,不处理更多行。如果少于两行,则结果为
null

私有字符串GetLine(字符串文件路径,int行)
private string GetLine(string filePath, int line)
{
    using (var sr = new StreamReader(filePath))
    {
        for (int i = 1; i < line; i++)
             sr.ReadLine();
        return sr.ReadLine();
     }
 }
{ 使用(var sr=newstreamreader(filePath)) { 对于(int i=1;i

希望这会有所帮助:)

如果您知道您的第二行是唯一的,因为它包含的特定关键字不会出现在文件中的任何其他位置,那么您也可以使用linq,好处是“第二行”可以是将来的任何一行

             var myLine = File.ReadLines("SourceSettings.txt")
            .Where(line => line.Contains("The Keyword"))
            .ToList();


Location=reader.ReadLine();Text=reader.ReadLine()ReadLine
?根据定义,第二个是指第一个之后的一个。因此,如果调用ReadLine()一次来读取第一行,猜猜下一行(第二行)是如何得到的?答对 了你再说一遍。。。。老实说,你怎么会不想尝试一下呢?最好接受Tim的解决方案谢谢大家!这对我帮助很大,我现在更明白了!我觉得否决票令人惊讶。是因为需要阅读整个文件吗?对我来说也是)不知道为什么要进行下一票,因为它是Valideyeah,下一票就像你预期的那样,用于阅读整个文件。OP只想要第二行,你建议读所有的行吗?可能是一个5000万行的文件:/n然后添加
Skip
可能会更糟糕,因为我假设它会复制除第一行之外的整个数组。这只是一个不好的建议,因为这样的事情simple@musefan:即使
ElementAtOrdefault
更合适,该假设也不正确<代码>跳过
不会复制任何内容,因为它正在使用延迟执行。当然,
File.ReadLines
在这里要好得多。@TimSchmelter:是的,Artion通知了我,因为我显然没有心情亲自检查这些东西。因此,
Skip
不是问题。但是,这仍然是糟糕的代码,特别是如果您已经知道为什么它是糟糕的(您可以原谅没有意识到这个问题)。我不知道为什么有两个人投了赞成票。只是因为有些东西起作用并不意味着它是好的嗯。。。但是
跳过
会返回什么?它是否会强制执行完全枚举,以便确定第一次枚举之后的所有行?我猜是的,所以您仍然会读取整个文件
Skip
返回新的IEnumerable,它将跳过第一个元素。它不会强制读卡器读取文件中的所有行,除非您执行smth,例如:
file.ReadLines(@“C:\Projects\info.txt”).Skip(1).ToArray()
。来自MSDN:立即返回值是一个存储执行操作所需的所有信息的对象。是的,这使得senseOP没有提到搜索关键字。这只是一个关于第二行的简单问题。。。“将来”这个关键字可能不再是唯一的了,因此没有必要尝试迎合这种场景中的假设是的,但他说的是一种设置文件,imho可以随时间增长或更改,为什么不给代码增加一些灵活性呢?但你是在假设一些没有被要求的事情。你不知道是否有关键词,所以答案没有帮助。如果你想澄清某事或提出这样的建议,你应该发表评论。这不是一个仅仅放置“可能相关的答案”的地方。你应该直接回答每个问题,这实际上是一个有用的函数,不知道为什么它会被否决,我的意思是,作为一个独立的函数,你可能会想在其中加入验证检查,但作为一个概念,我认为这是一个很好的答案,它很有用,但在框架中已经可用:
File.ReadLines(path).ElementAtOrDefault(line)
。上面的方法继续调用
ReadLine
,即使它已经返回了
null
,因为它位于流的末尾。完全忘记了这个方法。@TimSchmelter,它允许在读取时写入文件吗?@VishalNair:不,但是您可以使用这个解决方法:
             var myLine = File.ReadLines("SourceSettings.txt")
            .Where(line => line.Contains("The Keyword"))
            .ToList();