2011-03-24 86 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