2011-03-24 130 views
2

我有一个应用程序读取名为“words.csv”的CSV文件。我的新要求是:1)在阅读之前,需要确保目录中只有一个CSV文件。 2)它应该读取任何带有“.CSV”扩展名的文件,而不是“words.csv”(条件1满足后)。希望这是有道理的? 任何人都可以协助吗?C#读取目录中的文件

public class VM 
{ 
    public VM() 
    { 
     Words = LoadWords(fileList[0]); 
    } 

    public IEnumerable<string> Words { get; private set; } 

    string[] fileList = Directory.GetFiles(@"Z:\My Documents\", "*.csv"); 


    private static IEnumerable<string> LoadWords(String fileList) 
    { 

     List<String> words = new List<String>(); 

     if (fileList.Length == 1) 
     { 

      try 
      { 
       foreach (String line in File.ReadAllLines(fileList)) 
       { 
        string[] rows = line.Split(','); 

        words.AddRange(rows); 
       } 

      } 
      catch (Exception e) 
      { 
       System.Windows.MessageBox.Show(e.Message); 
      } 

      return words; 
     } 
    } 
} 

回答

5

您可以使用此代码来获得一个文件夹中的所有CSV文件的列表:

string[] fileList = Directory.GetFiles(@"Z:\My Documents\", "*.csv"); 

所以为了满足您的条件,这应该做的伎俩:

string[] fileList = Directory.GetFiles(@"Z:\My Documents\", "*.csv"); 
if(fileList.Length == 1) 
{ 
    //perform your logic here 
} 
+0

谢谢,这将如何契合我当前的代码? – Ben 2011-03-24 11:00:09

+0

你基本上可以使用相同的代码。将上面的注释替换为您的代码,而不是'filePath',您将不得不使用'fileList [0]'来获取文件的路径。 – 2011-03-24 11:02:27

+0

谢谢,即时通讯将字符串转换为字符串[]获得很多错误,你是否看到相同的东西? – Ben 2011-03-24 11:17:06

1
DirectoryInfo di = new DirectoryInfo(@"Z:\My Documents"); 

// Get a reference to each file in that directory. 
FileInfo[] fiArr = di.GetFiles(); 

if(fiArr.Length ==1) 
{ 
FileInfo fri = fiArr[0]; 
    //use fri.Extension to check for csv 
    //process as required 
} 

MSDN:DirectoryInfo.GetFiles

MSDN: FileInfo

0
FileInfo file = new DirectoryInfo(@"Z:\My Documents") 
          .EnumerateFiles("*.csv") 
          .SingleOrDefault(); 

if (file != null) 
{ 
    //do your logic 
} 

的LINQ的运营商的SingleOrDefault将确保有完全onle文件与pattern否则将返回null