2016-11-30 31 views
1

我试图这样做,我可以阅读,是经过了“检查”目前线,我试着用的StreamReader或while和for clicli,而不能移动到下一行,总是读取同一行。下面读行后具体线路

是提取一个例子.txt文件,在该文件有许多注册表项。

TXTFile

Windows Registry Editor Version 5.00 


//BEFORE MORE key 

[HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings-Bar1] 
"BarID"=dword:00008033 
"Visible"=dword:00000000 
"XPos"=dword:fffffffe 
"YPos"=dword:fffffffe 
"Docking"=dword:00000001 
"MRUDockID"=dword:00000000 
"MRUDockLeftPos"=dword:00000000 
"MRUDockTopPos"=dword:00000000 
"MRUDockRightPos"=dword:0000070c 
"MRUDockBottomPos"=dword:000000f5 
"MRUFloatStyle"=dword:00002004 
"MRUFloatXPos"=dword:80000000 
"MRUFloatYPos"=dword:00000000 

//MORE KEY AFTER 

代码

private void btnReplace_Click(object sender, EventArgs e) 
{ 
    string check = "[HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings-Bar1]"; 

    foreach (string line in File.ReadLines(_path)) 
    { 
     if(line == check) 
     { 
      //need here read all line after "check" 

     } 
    } 
} 
+1

首先,您需要在字符串文字中跳过反斜杠,或将该字符串标记为raw。为支持 –

回答

2

您可以使用一个布尔值来跟踪无论你在正确的地方:

这里我假设一个空白线表示该部分的结束。

bool readingTargetSection = false; 
foreach (string line in File.ReadLines(_path)) 
{ 
    if (readingTargetSection) 
    { 
     if (line.Trim() == "") { 
      // or just break out of the loop 
      readingTargetSection = false; 
     } 
     else { 
      // read the line 
     } 
    }  
    else if (line == check) 
    { 
     readingTargetSection = true; 
    } 
} 
+0

感谢,问题是,现在他读之后的所有行的“检查”,是否会发生崩溃只是找到一个空行,我试图插入: IF((readingTargetSection)&&(行=“ \“”)) 但不工作 – koss

+0

当然,'readingTargetSection'必须在每一行都是* not *'check'后重新设置,像'readingTargetSection =(line == check)' – JimmyB

+0

你确实说过*//需要在这里阅读问题中的“check”*之后的所有行。如果您想停止阅读空行,请参阅我的编辑。 – Blorgbeard

1

LINQ可以在这里使用。

private void btnReplace_Click(object sender, EventArgs e) 
{ 
    // The '@' marks the string as a verbatim string. 
    string check = @"[HKEY_CURRENT_USER\SOFTWARE\Thingamahoochie\WinMerge\Settings-Bar1]"; 

    var linesAfterCheck = File.ReadLines(_path) 
    .SkipWhile(l => l != check) // Skip until check 
    .Skip(1); // Skip line containing check 

    foreach (string line in linesAfterCheck) 
    { 
     // Code 
    } 
}