2012-09-14 262 views
-3

我的问题是,我正在阅读一个目录,然后我按名称过滤文件,但也在这个目录中有其他文件具有不同的名称,我是什么试图做的是用不同的名字输入这个文件,并且读取第6行,如果这行与其他具有相同名称的文件的名称匹配,则将这些文件保存到数组中并稍后处理。从目录读取文件,然后读取同一文件的特定行c#

在此先感谢。

+0

投票下来。这不是一个编程问题,而是一个为你写程序的请求。 @Tim很乐意回答。 –

回答

0

试试这个:

String dir = @"C:\Temp"; 
String pattern = "*.txt"; 
var foundFiles = new List<String>(); 

foreach (String filePath in Directory.EnumerateFiles(dir, pattern)) 
{ 
    foreach (String filePath2 in Directory.EnumerateFiles(dir, pattern)) 
    { 
     if (filePath != filePath2 && 
      File.ReadLines(filePath2).ElementAtOrDefault(5) == Path.GetFileName(filePath)) 
      foundFiles.Add(filePath); 
    } 
} 

注:没有经过测试的,没有IDE编写的,但也许是有用的反正。

+0

嗨,我是新的编程与C#你能解释你在做什么,谢谢你的帮助.. – Carl

+0

你好,你应该看看'System.IO'命名空间中的类。我使用例如['Directory.EnumerateFiles'](http://msdn.microsoft.com/en-us/library/dd413233.aspx)来获取目录中的文件列表。如果没有太多的行,则Enumerable.ElementAtOrDefault返回(在这里)第6行和'null'。结果是'List '类似于数组。也许你想要存储'filePath2'(或两者)。如果你只想比较文件名(不带'.txt' f.​​e.),你可以使用'Path.GetFileNameWithoutExtension(path)'。 –

+0

确定Tim,实际上我将这些文件存储到列表框中,我会试试这个,谢谢你的帮助。 – Carl

0

这应该是读取指定行的最简单方法。

string dir = "C:\\\\someFile.txt"; 
int LineNo = 1; //Pick a line 
string ChosenLine = File.ReadAllLines(dir)[lineNo]; 

如果您想为文件夹中的每个文件执行此操作,请使用for或foreach。

void someMethod() 
{ 
    string folderToScan = "C:\\\\someFolder\\"; 
    foreach(string dir in Directory.GetDirectories(folderToScan).ToList()) 
    { 
     if(isExtention(dir,".txt")) 
     { 
      int LineNo = 1; //Pick a line 
      string ChosenLine = File.ReadAllLines(dir)[lineNo]; 
     } 
    } 
} 

bool isExtention(string f, string extention) 
{ 
    return f != null && f.EndsWith(extention, StringComparison.Ordinal); 
}