一个奇怪的问题

「已注销」 2009-10-02 04:59:07
一般情况下,缺省文件夹应该是VB的安装目录。我们输入如下代码,就可以在VB的安装目录下创建一个名为dd的文件夹。
Private Sub Form_Load()
MkDir "dd"

End Sub

ChDir可以更改缺省文件夹,比如我们输入如下代码:
Private Sub Form_Load()
ChDir "d:\soft"
MkDir "dd"

End Sub

就可以在d:\soft下创建一个dd文件夹。但是如果代码是这样的:
Private Sub Form_Load()
ChDir Environ("TEMP")
MkDir "dd"

End Sub

却没有在Temp文件夹下创建dd文件夹。不知这是什么原因?请赐教。
...全文
102 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
Flyingdragon168 2009-10-04
  • 打赏
  • 举报
回复
F8追蹤一下就OK了。
「已注销」 2009-10-04
  • 打赏
  • 举报
回复
谢谢各位,确实是没有改缺省驱动器的问题。
chinaboyzyq 2009-10-03
  • 打赏
  • 举报
回复
我用windows2003,administrator,测试没有问题
C:\Documents and Settings\Administrator\Local Settings\Temp\dd

记住不同的用户C:\Documents and Settings\Administrator\Local Settings\Temp\dd红字部分是不一样的debug跟踪一下

threenewbee 2009-10-03
  • 打赏
  • 举报
回复
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

Private Sub Command1_Click()
Dim l As Long, t As String
l = GetTempPath(0, t)
Dim s As String * 32
GetTempPath l, s
MsgBox s
End Sub
hanvan 2009-10-03
  • 打赏
  • 举报
回复
先改变盘符
贝隆 2009-10-03
  • 打赏
  • 举报
回复
飘过
苍狼传说 2009-10-02
  • 打赏
  • 举报
回复
你可以尝试搜索你才建的文件夹,看建到什么地方去了。肯定是建好了的,不然一定会报错。
苍狼传说 2009-10-02
  • 打赏
  • 举报
回复
哎!!!
可能你的VB是安装在D:盘的。
建目录之前不但需要更换当前路径,还需要更新当前驱动器!
不过不建议使用内置的这个函数了,不熟的话,不好使用。
使用FSO吧,简单多了。
SYSSZ 2009-10-02
  • 打赏
  • 举报
回复
我怀疑普通用户权限不够.
SYSSZ 2009-10-02
  • 打赏
  • 举报
回复
我用Administrator登录,XP系统,VB6.0下反复测试,在C:\Documents and Settings\Administrator\Local Settings\Temp下可以找到dd文件夹.
lxq19851204 2009-10-02
  • 打赏
  • 举报
回复
ding
神马都能聊 2009-10-02
  • 打赏
  • 举报
回复
把MSDN中的说明贴给你吧。

可以在程序中使用 FSO 对象模型来处理驱动器和文件夹,如同在“Windows 资源管理器”中能进行的交互方式一样。您可以复制和移动文件夹,获得驱动器和文件夹的信息,等等。

获得驱动器的信息
Drive 对象允许获得一个系统的各个驱动器的信息,这些驱动器可以是物理的,也可以是位于网络上的。通过该对象的属性可以获得下列信息:

以字节表示的驱动器总空间 (TotalSize 属性)


以字节表示的驱动器可用空间 (AvailableSpace 或 FreeSpace 属性)


给驱动器指定的字母号 (DriveLetter 属性)


驱动器类型,诸如可移动的、固定的、网络、CD-ROM、或者 RAM 盘 (DriveType 属性)


驱动器序列号 (SerialNumber 属性)


驱动器使用的文件系统类型,诸如 FAT、 FAT32、 NTFS等等 (FileSystem 属性)


驱动器是否可用 (IsReady 属性)


共享和/或卷标的名称 (ShareName 和 VolumeName 属性)


驱动器的路径或根文件夹 (Path 和 RootFolder 属性)
Drive 对象用法示例
下列示例说明了如何使用 Drive 对象来收集有关驱动器的信息。请记住,在下面的代码中并没有对一个实际 Drive 对象的引用;而是使用 GetDrive 方法来获得一个对已有 Drive 对象(本例中就是 drv)的引用:

Private Sub Command3_Click()
Dim fso As New FileSystemObject, drv As Drive, s As String
Set drv = fso.GetDrive(fso.GetDriveName("c:"))
s = "Drive " & UCase("c:") & " - "
s = s & drv.VolumeName & vbCrLf
s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
s = s & " Kb" & vbCrLf
s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
s = s & " Kb" & vbCrLf
MsgBox s
End Sub
使用 CurDir、 ChDrive、 ChDir 或 App.Path
如果使用 CurDir 函数、ChDrive 和ChDir 语句、或者 Path 属性 (App.Path),请注意,它们返回的有可能是一个 UNC 路径(即,形如 \\Server\Share而不是一个驱动器路径(如 E:\Folder),这取决于运行程序或工程的方式。

在如下的情况,App.Path 返回一个 UNC 路径:

当运行一个从共享网络加载的工程时,即使该网络共享已经被映射到一个驱动器号。


当从一个共享网络运行一个已编译的可执行文件时(但是仅当通过一个 UNC 路径运行该程序)。
ChDrive 不能处理 UNC 路径,因此当 App.Path 返回一个 UNC 路径给 ChDrive 时,就会产生一个错误。要避免这个错误,可以在 ChDrive 语句之前添加 On Error Resume Next,或者测试 App.Path 的头两个字符是否是反斜杠:

On Error Resume Next
ChDrive App.Path
ChDir App.Path

这个改动将处理所有使用 UNC 路径从 Windows 启动程序(例如,在“启动”菜单的“运行”对话框中)的情况,因为 Windows 将当前的目录设为一个 UNC 路径。ChDir 可以正确地处理 UNC 路径之间的转换。(ChDrive 的失效可以被忽略,因为 UNC 路径当中没有驱动器号)

然而,如果在 MS-DOS 的命令行提示符后键入一个 UNC 路径来运行程序的话,上面的代码不会生效。这是因为命令行提示符用的总是当前目录的驱动器路径,所以 CurDir 被设为一个驱动器路径。ChDir 不会产生错误,但是它不能将一个目录从驱动器路径变为 UNC 路径。在这种情况下,唯一的解决办法是定位一个已经映射为 UNC 路径中指定共享的本地驱动器,或者使用网络命令来创建这样一个映射。

如果工程是从一个网络共享—— UNC 路径或映射的驱动器路径——加载到 Visual Basic 集成开发环境(IDE)中的话,那么当运行工程时 App.Path 将返回一个 UNC 路径,而切ChDrive 失败并产生一个错误。ChDir 虽然不会出错,但目录并未改变。唯一的解决办法是通过手工来设置驱动器和目录:

Const PROJECTSHARE = "E:\VBPROJ\MYPROJECT"
#Const Debug = True
#If Debug Then
ChDrive PROJECTSHARE
ChDir PROJECTSHARE
#Else
On Error Resume Next
ChDrive App.Path
ChDir App.Path
#End If

如果不止一个人可能在共享网络上打开该工程,那么可以使用一个 DOS 环境变量来允许每个人都拥有自己对该共享的映射:

#Const Debug = True
#If Debug Then
ChDrive Environ("MYPROJECTDIR")
ChDir Environ("MYPROJECTDIR")
#Else
On Error Resume Next
ChDrive App.Path
ChDir App.Path
#End If

MYPROJECTDIR 的值指定了被映射的驱动器号和路径,例如:

SET MYPROJECTDIR=M:\VBProj\MyProject
使用文件夹
下表显示了普通的文件夹任务以及完成这些任务的方法:

任务 方法
创建一个文件夹 FileSystemObject.CreateFolder
删除一个文件夹 Folder.Delete 或
FileSystemObject.DeleteFolder
移动一个文件夹 Folder.Move 或
FileSystemObject.MoveFolder
复制一个文件夹 Folder.Copy 或
FileSystemObject.CopyFolder
检索文件夹的名称 Folder.Name
查找一个文件夹是否在驱动器上 FileSystemObject.FolderExists
获得已有Folder对象的一个实例 FileSystemObject.GetFolder
找出一个文件夹的父文件夹的名称 FileSystemObject.GetParentFolderName
找出系统文件夹的路径 FileSystemObject.GetSpecialFolder


示例
该示例演示如何使用 Folder 对象和 FileSystemObject 对象来操作文件夹并获得其信息:

Private Sub Command10_Click()
' 获得 FileSystemObject 的实例。
Dim fso As New FileSystemObject, fldr As Folder, s As String
' 获取 Drive 对象。
Set fldr = fso.GetFolder("c:")
' 显示父文件夹名。
Debug.Print "Parent folder name is: " & fldr
' 显示驱动器名。
Debug.Print "Contained on drive " & fldr.Drive
' 显示根文件名。
If fldr.IsRootFolder = True Then
Debug.Print "This folder is a root folder."
Else
Debug.Print "This folder isn't a root folder."
End If
' 用 FileSystemObject 对象创建一个新的文件夹。
fso.CreateFolder ("c:\Bogus")
Debug.Print "Created folder C:\Bogus"
' 显示文件夹的基本名称。
Debug.Print "Basename = " & fso.GetBaseName("c:\bogus")
' 删除新建的文件夹。
fso.DeleteFolder ("c:\Bogus")
Debug.Print "Deleted folder C:\Bogus"
End Sub
神马都能聊 2009-10-02
  • 打赏
  • 举报
回复
ChDir不具备夸磁盘的功能,因此你要先设置盘符。类似如下的代码:

Dim s As String
ChDrive "c:"
s = Environ("TEMP")
ChDir s
clear_zero 2009-10-02
  • 打赏
  • 举报
回复
你确定你有权利在特定目录下建立文件夹?

我的运行记过是正确的阿
「已注销」 2009-10-02
  • 打赏
  • 举报
回复
我知道Environ("TEMP")是C:\Documents and Settings\用户名\Local Settings\Temp,但
Private Sub Form_Load()
ChDir Environ("TEMP")
MkDir "dd"

End Sub

执行后C:\Documents and Settings\用户名\Local Settings\Temp里面没有dd文件夹。
clear_zero 2009-10-02
  • 打赏
  • 举报
回复
这个问题你断点debug一下就知道了,我在immediate窗口中看到的
Environ("TEMP") 在xp系统下
C:\DOCUME~1\yaqiz\LOCALS~1\Temp

然后我继续运行Mkdir "dd"
在然后我就在我的temp路径下找到了dd文件夹
C:\Documents and Settings\yaqiz\Local Settings\Temp\dd


threenewbee 2009-10-02
  • 打赏
  • 举报
回复
Environ("TEMP") 在 XP 里面是
C:\Documents and Settings\Administrator\Local Settings\Temp
不是
C:\Windows\Temp

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧