0

ビジュアル foxpro 9 アプリケーションから、filer.fileutils activeX オブジェクトを使用して、フォルダー内のすべてのファイルのリストを取得します。

これは数年間うまくいきました。しかし、Windows 2008 を搭載したサーバーで実行すると、フォルダーから一部のファイルしか取得できません。 (フォルダーはネットワーク上の場所です) Windows 7 ワークステーションからまったく同じコードを実行すると、すべてのファイルが表示されます。

サーバーでは、.doc および .xls ファイルのみを受け取り、.docx および .xlsx ファイルは返されません...

その後、scripting.filesystem オブジェクトを使用するようにコードを切り替えましたが、これも .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 週間前に機能しなくなったため、どの設定またはセキュリティ更新プログラムがサーバーでこれを引き起こしたのか疑問に思っています...

4

2 に答える 2

1

Tamar の言うとおりです...そして、それは長い間利用されてきたものです。パスのパラメーターをローカライズして、配列処理のために使用している変数を開始およびローカライズすれば、うまくいくはずです。私は個人的に 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 
于 2013-06-18T13:48:48.687 に答える
0

組み込みの ADIR() 関数を使用しないのはなぜですか? フォルダー内のすべてのファイルのリスト、またはファイル仕様に一致するすべてのファイルのリストで配列を埋めます。

于 2013-06-17T20:27:30.777 に答える