2016-02-05 154 views
1

在VB6代碼中,我使用VBA.FileSystem.Dir從目錄路徑獲取文件名。但它正在返回空字符串。請找到下面的代碼VBA.FileSystem Dir

Call getFile.ShowOpen //getFile is CommonDialog Control of VB6 

txtFile.Text = getFile.FileTitle //Correct file name is returned 
If Dir(getFile.filename) == "" Then 
    // Conditions come true..But ideally it should not!!! 

但該文件駐留在某個網絡位置。是否有任何權限問題?如果是的話,我如何看到該文件在getFile.ShowOpen對話框和Dir()返回空字符串?

對什麼是錯在上面的代碼

+1

什麼是'cdFile.FileName'的實際價值? (提示:使用調試器查找。)文件是否存在於文件系統中的該位置? (提示:使用資源管理器找出。) –

+0

是的...文件存在。我可以在getFile.ShowOpen對話框中選擇文件。 但該文件存在於其他網絡驅動器 – user3453456

+0

我有我懷疑VB6會/可能會使用VBA類型庫。 VBA是VB的一個子集,而不是其他方式。 VB6應該有它自己的FileSystem函數(http://www.vb6.us/tutorials/working-file-system-vb6)但是看看你提供的代碼片段,我不得不想知道cdFile.filename的來源?你確定這會回報你期望的價值嗎?如果你使用Dir(txtFile.Text)而不是? –

回答

1

任何幫助,請考慮以下幾點:

  1. 據我所知,雙等號(= =)在VB6不支持

  2. 迪爾= (無論)可以返回「」 如果無論是目錄還是隱藏文件

你可以只捕獲使用 如果迪爾(不管,vbDirectory或者vbHidden或者vbArchive或者vbNormal)

但是,你還是要測試每一個看到它是什麼名字。

順便說一句,最好有一個變量來接收Dir並檢查它,而不是檢查Dir本身。

dim sTgt$ 
sTgt = Dir(whatever) 

此外,順便說一句,每種類型的窒息的替代方法是檢查FileLen。

奇怪的是,FileLen並沒有受到Hidden/Sys attribs的影響,儘管如果文件不存在,FileLen會出錯。

所以,(這真的是老黑客的東西,但方便的代碼)。

如果聲明一個變量FileLen

Dim lfLen& 
'and have some error coding 
On Error resume next 

'and then just inspect the target 
lfLen = FileLen(stgt) 

if lflen > 0 then 
... do things 

(or if hacking) 
... binary open 

因爲,如果該文件沒有存在, 目錄將返回0, 但如果文件=存檔,隱藏,SYS將返回字節。

心連心

加里

+0

不要忘記'vbReadOnly'標誌。 – Bob77

+0

是鮑勃,非常正確。我有點空氣的編碼,並想'我知道還有另一個參數',但我相信有些人會注意到。 ;-) – rockmo