Vfp为我们提供了非常丰富的命令和函数,在Vfp中编程应尽量用Vfp身的命令或函数,只有实在没办法时才考虑用WIN32API外部连接库。
1.如何取得系统目录
nPath_ls=fullpath('command.com',2)
nPath=strtran(nPath_ls,'COMMAND.COM','') &&取得Windows\的目录名
*如果想得到SYSTEM目录则:
nPath=strtran(nPath_ls,'COMMAND.COM','system\') &&取得Windows\system\的目录名
当然下面的代码更简单:
mWinPath=getenv("windir") &&取得Windows\的目录名
2.如何取得运行程序的盘符和当前目录
Dqml=sys(5)+sys(2003)+'\'
3.如何取得某个文件的大小、修改日期及属性
Vfp为我们提供了一个非常强大函数ADIR(),
语法:
ADIR(ArrayName [, cFileSkeleton [, cAttribute [, cCreatorType]]])
使用:
X=Adir(Myml,'C:\TEMP\*.DBF')
返回:
X=符合cFileSkeleton条件的文件或目录个数
Myml=一个有五列内容的数组。
这五列的含义是:
1 文件名 字符型
2 文件大小 数值型
3 文件日期 日期型
4 文件时间 字符型
5 文件属性 字符型
例:我们想得到某个文件的大小或文件修改日期及属性:
X=Adir(Myml,'C:\TEMP\abc.DBF')
IF X#0
wjsize=Myml(1,2) &&取得文件大小
wjdate=Myml(1,3) &&取得修改日期及属性
wjAttr=Myml(1,5) &&取得文件属性
ELSE
wait wind '没有您指定的文件'
ENDI
文件属性的含义:
A 档案文件 一 可读写
H 隐藏文件
R 只读文件
S 系统文件
D 目录或文件夹
我们利用Adir()还可以检查某个目录是否存在:
X=Adir(Myml,'C:\ABCDE','D')
IF X=0
wait wind '该目录不存在...'
ENDI
当然用下面的更简单:
if ! file('C:\ABCDE\nul')
wait wind '该目录不存在...'
endi
总之Adir()可以达到很多目的,具体使用请看查看帮助。
4.如何检查某磁盘是否存在
if ! file('a:\nul')
wait wind 'A盘没准备好!...'
endi
5.如何删除只读属性的文件
Vfp没有提供改变文件属性的命令或函数,在Vfp代码中无法删除只读属性的文件,我发现可以利用Rename命令来解决。
如c:\temp\XX1.DAT是一个只读属性的文件。
Rename c:\temp\XX1.DAT TO C:\RECYCLED\XX1.DAT
*将XX1.DAT文件改名到RECYCLED[回收站],就等于删除了该文件。 VFP下的Rename命令当TO后面的文件夹与前面的不一致时,相当于资源管理器里的剪切命令,这是不是也是BUG呢?
6.如何改变文件的属性
Vfp没有提供改变文件的属性的命令或函数,要想改变文件的属性必须转个弯,先把原文件改名,再拷贝回一个然后再删除就到达了目的, 如有一文件:
XX1.DAT是只读属性的文件,不改属性无法往文件里写新内容。
Rename c:\temp\XX1.DAT TO C:\temp\XX1.DDD &&先改名
Copy file C:\temp\XX1.DDD to C:\temp\XX1.DAT &&再拷贝
Rename c:\temp\XX1.DDD TO C:\RECYCLED\XX1.DAT &&再删除
这样新拷贝的XX1.DAT就是解除了只读属性的文件了。
7.Wait命令的应用
Wait命令应用很方便,我在VB,DELPHI等语言中就始终没有找到与其功能 相似的语句,
可是我们在VFP中使用时常常只是用到了它的部分功能,而忽略了 一些很有用的功能。 Wait
命令也有不少子句:
WAIT
[cMessageText]
[TO MemVarName]
[WINDOW [AT nRow, nColumn]]
[NOWAIT]
[CLEAR | NOCLEAR]
[TIMEOUT nSeconds]
比如我们的使用常常只是:
WAIT WIND '暂停...'
使'暂停...'这两个字停留在其默认窗口的右上角,其实完全可以用 [AT nRow, nColumn]来改
变其停留位置:
WAIT WIND '暂停...' AT 10,30
使'暂停...'停留在指定的第10行,第30列上。
WAIT WIND '暂停...' +CHR(13)+'另起一行...' AT 10,30
在提示信息中加上CHR(13),提示信息可分行显示。 而:
WAIT WIND '暂停10秒...' TIMEOUT 10
则可在无击键和鼠标移动的情况下只暂停10秒。 ......
评论