在visual foxpro 9应用程序中,我们使用filer.fileutils activeX对象来检索文件夹中所有文件的列表。
这项工作好几年了。 但是现在我们只从文件夹中获取一些文件,当我们在带有Windows 2008的服务器上运行它时。(文件夹是网络位置) 当我们从Windows 7工作站运行相同的代码时,我们会看到所有文件
在服务器上我们只收到.doc和.xls文件, 不返回.docx和.xlsx文件...
然后我们将代码切换为使用scripting.filesystemobject, 但这也只返回.doc和.xls文件,并且缺少.docs和.xls文件
fso=createobject("scripting.filesystemobject")
fld=fso.getfolder(lcFolderName)
for each fil in fld.files
?"Name Of File: ", fil.name
?"Size: ", fil.size
?"Date created:", fil.DateCreated
?"Last modified:", fil.DateLastModified
next
由于这在2-3周前停止工作,我们想知道在服务器上导致这种情况的设置或安全更新...
答案 0 :(得分:1)
添马舰是对的...而且它已经有很长一段时间了。如果你本地化你的路径参数来启动和本地化你正在使用的变量进行数组处理,你应该是好的。我个人从不尝试使用SET DEFAULT TO或SET PATH TO。下面的方法只接受一个路径,并使用IT作为遍历目录树的基础。我甚至把结果放在光标中供你随意使用。如果您想添加自己的目的,甚至可以添加其他列。唯一没有的是创建日期......只是修改日期。
CREATE CURSOR C_DirWalk ;
( justThePath c(50),;
TheFile c(50),;
TheSize i,;
TheDate d,;
TheTime c(8),;
TheFlags c(5) )
walkTheDir( "C:\SomeFolder\SomeSubFolder\" )
PROCEDURE WalkTheDir
LPARAMETERS justOneDirectory
*/ Make sure it always has the trailing backslash
justOneDirectory = ADDBS( ALLTRIM( justOneDirectory ))
LOCAL ARRAY laOneDirPath[1,5]
LOCAL lnF, lnI
*/ Include any Hidden or Directories...
lnF = ADIR( laOneDirPath, justOneDirectory + "*.*", "HD" )
FOR lnI = 1 TO lnF
INSERT INTO C_DirWalk;
( justThePath,;
TheFile,;
TheSize,;
TheDate,;
TheTime,;
TheFlags );
values;
( justOneDirectory,;
laOneDirPath[ lnI, 1],;
laOneDirPath[ lnI, 2],;
laOneDirPath[ lnI, 3],;
laOneDirPath[ lnI, 4],;
laOneDirPath[ lnI, 5] )
*/ If this was a directory, make a recursive call but tacking on
*/ this path... but do NOT process directories that are
*/ the "." (same directory) or ".." (parent)
IF "D" $ laOneDirPath[ lnI, 5] ;
AND LEN( CHRTRAN( laOneDirPath[ lnI, 1], ".", "" )) > 0
*/ Yes, a valid path OTHER than just "." or ".."
WalkTheDir( justOneDirectory + laOneDirPath[ lnI, 1] )
ENDIF
ENDFOR
ENDPROC
答案 1 :(得分:0)
为什么不使用内置的ADIR()函数?它将填充一个数组,其中包含文件夹中所有文件的列表,或者所有匹配文件规范的文件。