2014-04-10 103 views
0

當我把這段代碼轉換,從VB:這段代碼轉換,從VB到C#

Dim r As DialogResult = FldSource.ShowDialog() 
     If r = Windows.Forms.DialogResult.OK Then 
      lstPath.Items.Clear() 
      lblSoLuong.Text = lstPath.Items.Count 
      txtPath.Text = FldSource.SelectedPath 
      Dim tenfile, FS() As FileInfo 
      Dim di As New DirectoryInfo(txtPath.Text) 
      FS = di.GetFiles("*.txt") 
      For Each tenfile In FS 
       lstPath.Items.Add(tenfile.FullName) 
      Next 
      lblSoLuong.Text = lstPath.Items.Count 
     End If 

到C#:

try 
      FolderBrowserDialog FldSource = new FolderBrowserDialog(); 
      DialogResult r = FldSource.ShowDialog(); 
      if (r == DialogResult.OK) 
       lst_Path.Items.Clear(); 
       lbl_Soluong.Text = lst_Path.Items.Count.ToString(); 
       txt_Path.Text = FldSource.SelectedPath; 
       FileInfo tenfile, FS(); 
       DirectoryInfo di = new DirectoryInfo(txt_Path.Text); 
       FS= di.GetFiles(".txt"); 

我在這一行有錯誤:

FS= di.GetFiles(".txt"); 

我想知道我的錯誤在哪裏?

+5

也許你可以與我們的錯誤共享你收到? – David

+0

需要*獲取文件 – Ric

+0

您是否錯過了FS = di.GetFiles(「.txt」)中的「*」; ? –

回答

0

你缺少*

FS = di.GetFiles("*.txt"); 
0

它不應該是這樣的:
FS = di.GetFiles( 「* TXT。」);

2

注意到你在VB中使用搜索模式:

FS = di.GetFiles("*.txt") 

而在C#:

FS = di.GetFiles(".txt"); 

從VB到C#的變化並不會改變該方法被調用,或值傳給他們。你仍然需要發送相同的搜索模式。 (事實上​​,即使是在VB的版本,這是極有可能對於GetFiles()的實現是用C#編寫反正。)

有一個在內部的工作沒有區別,只是在通過調用這些內部運作的語法。

另外,我不是100%肯定你想在這裏做的:

FileInfo tenfile, FS(); 

如果FS應該是一個數組,你可以這樣做:

FileInfo tenfile; 
FileInfo[] FS; 

雖然您可以使用隱式輸入來聲明它,甚至不需要聲明語句:

var FS = di.GetFiles("*.txt"); 
1

I th墨水你想要做的是創建一個FileInfo陣列。在這種情況下,而不是這樣的:

FileInfo tenfile, FS(); 

你需要這樣的:

FileInfo tenfile; 
FileInfo[] FS; 

而且,正如其他人所指出的那樣,你缺少在GetFiles搜索字符串的*,但不會給你一個錯誤,它不會做你所期望的。

2

你不能聲明一個變量這種方式在C#

FileInfo tenfile, FS(); 

如果你需要一個FileInfo tenFile和FileInfo的FS的陣列,使用

FileInfo tenfile; 
FileInfo[] FS; 
+0

這是答案 –

+0

嘗試聲明'INT的x,y = 0;'的代碼將編譯.NET 4.0 – abhi

+0

@abhi,是的,但是這是'FS()','不FS'。這是不一樣的。而'Directory.GetFiles'返回'FileInfo []',而不是'FileInfo'。 –