2016-02-05 152 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