我收到来自开发人员的反馈:“Visual Basic (6) 处理 UNC 路径的唯一方法是将其映射到驱动器。” 这是准确的吗?如果是这样,根本问题是什么,除了映射驱动器之外还有其他选择吗?
7 回答
我们有一个使用 UNC 构建连接字符串的旧版 VB6 应用程序,所以我知道 VB6 可以做到。通常,您会发现权限问题是罪魁祸首。
这是一种有效的方法。
Sub Main()
Dim fs As New FileSystemObject ' Add Reference to Microsoft Scripting Runtime
MsgBox fs.FileExists("\\server\folder\file.ext")
End Sub
即使是老式的文件处理类型也可以:
Open "\\host\share\file.txt" For Input As #1
Dim sTmp
Line Input #1, sTmp
MsgBox sTmp
Close #1
Scripting.Runtime
如果您使用的是图书馆,我认为这不是真的。
Oldschool VB 有一些用于文件处理的语言结构。这些都是邪恶的。不要使用它们。
在 VB6 中,您不能将 CHDrive 用于 UNC 路径。
由于 App.Path 返回一个 UNC 路径,因此尝试使用 ChDrive 到该路径ChDrive App.Path
会导致错误。
正如微软所说“ChDrive 无法处理 UNC 路径,因此当 App.Path 返回一个时会引发错误”。有关详细信息,请查看http://msdn.microsoft.com/en-us/library/aa263345(v=vs.60).aspx
你在做什么类型的文件 I/O?如果是文本,请考虑使用 FileSystemObject。
当以下项目的组合存在时,我观察到 VB6 UNC 路径问题:
- UNC 指向隐藏的“$”共享
- 服务器名称超过 8 个字符和或具有非标准字符
- 路径的一部分特别长
- 服务器出于性能目的关闭了 8.3 支持
通常是 75 路径文件访问错误或 54。有时这可能与 API 相关,例如上述 UNC 上的 getshortfilename 和 getshortpathname。
除此之外,它们工作得很好......映射路径通常不会出现这些问题,但那些该死的驱动器映射经常断开连接,并且可以随时更改,导致许多支持问题。