VB运行DOS命令生成文本文件并打开处理的问题????
用VB执行DOS命令,生成文本文件随即打开但是由于文本文件生成需要一段时间,
还未等文件生成完毕VB就打开了这个文件
请问如何让程序等待DOS命令执行完毕再打开这个文本文件啊
最好还能加上一个等待的进度条显示文本文件的生成过程
代码如下:
Shell "cmd /c dir /s /b e:\ dir.txt"
Open "dir.txt" For Input As #1
怎么让dir.txt生成完毕再打开啊? --------------------编程问答-------------------- 咋会有同样的问题,也是同样的分数:如何让程序等待DOS命令执行完毕再打开这个文本文件啊 --------------------编程问答-------------------- 用时钟吧!隔一段时间检查文件是否存在. --------------------编程问答-------------------- 参考2楼页面,用chenjl1031大哥方法。
Private Sub Command1_Click()--------------------编程问答-------------------- 参考一下吧:
Dim lFileSize As Long
Shell "cmd /c dir e:/s/a/l>e:\dir.txt", vbHide
cjl: If Dir("e:\dir.txt") <> "" Then
lFileSize = FileLen("e:\dir.txt")
If lFileSize <> 0 Then
Shell "notepad.exe " & "e:\dir.txt", vbNormalFocus
Else
GoTo cjl
End If
Else
GoTo cjl
End If
End Sub
--------------------编程问答-------------------- 在代码中间加个时钟不行么? --------------------编程问答-------------------- 我在这里不是已经回答了吗? (无须任何API和Timer事件):
Option Explicit
Private Sub Command1_Click()
' Shell "cmd /c dir /s /b e:\ c:\dir.txt"
Shell "cmd /c dir e:\>c:\dir.txt"
Timer1.Enabled = True
End Sub
Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 1000
End Sub
Private Sub Timer1_Timer()
lblInfo.Caption = CStr(FileLen("c:\dir.txt"))
End Sub
http://topic.csdn.net/u/20100303/16/f798eae8-c7ae-45fe-8d25-0839194c4519.html --------------------编程问答-------------------- 说说为什么不能用Sleep和Timer控件:
1、用API函数Sleep把握不住Shell运行究竟需要多长时间;
2、用Timer增加额外控件,降低了系统效率,不能考虑。
其实 ,用下面的代码可以粗略估计一下Shell的运行时间和goto的次数,应该说所用时间是最短的,是比较合理的。除此以外,还可以用API函数WaitForSingleObject,没有跟这个API比较过,孰优孰劣。具体所用时间跟当时所用的内存环境和Dir那个盘的目录大小有关!也许这个时间每次都不一样!具体用的时候要在程序中加一个doevents!
Option Explicit--------------------编程问答-------------------- pid=shell(...)
Private Declare Function GetTickCount Lib "kernel32.dll" () As Long
Dim Number As Long, StartTime As Long, EndTime As Long
Private Sub Command1_Click()
Dim lFileSize As Long
StartTime = GetTickCount
Shell "cmd /c dir e:/s/a/l>e:\dir.txt", vbHide
cjl: Number = Number + 1
If Dir("e:\dir.txt") <> "" Then
EndTime = GetTickCount
lFileSize = FileLen("e:\dir.txt")
If lFileSize <> 0 Then
Shell "notepad.exe " & "e:\dir.txt", vbNormalFocus
Else
GoTo cjl
End If
Else
GoTo cjl
End If
Debug.Print "Number="; Number, "Shell运行时间为:"; (EndTime - StartTime) / 1000; "秒"
End Sub
'等待目标进程退出的信号
WaitForSingleObject pid,.....
......
这才是王道。。楼主给点分吧 --------------------编程问答-------------------- 关键是如何加上一个等待的进度条显示文本文件的生成过程 ?因为执行DOS命令需要很长时间
--------------------编程问答-------------------- 还是参考这个吧。
Private Sub Command1_Click()'找出文件夹内文件最新的更新时间(包括里面的子文件夹的文件哈) 要把这个文件夹内的所有文件的最后修改时间都要检查一次,并取出近的一个时间,(主要是检查这个文件夹里面的内容有没有更新),并取出这个文件最后一次的更新时间.环境是VB6--------------------编程问答-------------------- 关于进度条,用progressbar控件,
Dim after As Double
Dim f As Integer
Dim dn As String
Dim fn As String
Dim ft As String
Dim ft_date As Date
Command1.Enabled = False
On Error GoTo ERR0
Kill "c:\files.txt"
dn = "c:\windows"
On Error GoTo ERR1
Shell ("cmd /c dir " & dn & "\*.* /a-d /b /s /o-d >c:\files.txt")
after = Now + 60# / 3600# / 24#
f = FreeFile()
Do
REOPEN1:
DoEvents
If Now > after Then
MsgBox "Wait c:\files.txt 60s overtime!"
Exit Sub
End If
Open "c:\files.txt" For Input Lock Read Write As #f
Line Input #f, fn
Close #f
Exit Do
Loop
On Error GoTo ERR0
Kill "c:\files.txt"
On Error GoTo ERR2
Shell ("cmd /c dir " & Chr(34) & fn & Chr(34) & ">c:\files.txt")
after = Now + 60# / 3600# / 24#
f = FreeFile()
Do
REOPEN2:
DoEvents
If Now > after Then
MsgBox "Wait c:\files.txt 60s overtime!"
Exit Sub
End If
Open "c:\files.txt" For Input Lock Read Write As #f
Line Input #f, ft
Line Input #f, ft
Line Input #f, ft
Line Input #f, ft
Line Input #f, ft
Line Input #f, ft
Close #f
Kill "c:\files.txt"
Exit Do
Loop
ft = Left(ft, 17)
ft_date=CDate(ft)
MsgBox "The newest file in [" & dn & "] is [" & fn & "], datetime is [" & ft_date & "]"
Command1.Enabled = True
Exit Sub
ERR0:
Resume Next
ERR1:
Resume REOPEN1
ERR2:
Resume REOPEN2
End Sub
progressbar.max= 100
progressbar.value= 当前完成文件数/总文件数*100
但用dos命令不好控制返回,建议用递归扫描的方法完成 --------------------编程问答-------------------- 用不着那么复杂,学360,做个循环的进度条,或者用一个标签计一下时间持续了多少秒也行。用DOS命令Dir命令列目录,用户不知道进度如何,因为那是操作系统的事,列了多少,还剩多少,这些都不知道。只要简单实用就行。
补充:VB , 基础类