VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

分享:列出某目錄下所有檔案名稱

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
goto-dream



註冊時間: 2004-05-11
文章: 909


第 1 樓

發表發表於: 星期六 七月 03, 2004 1:30 am    文章主題: 分享:列出某目錄下所有檔案名稱 引言回覆

分享:列出某目錄下所有檔案名稱
需使用到ADIR()

代碼:

LOCAL lScanDir,sFiles,ListFiles[1],cFile,cNewFile,i
LOCAL lcCurDir

lc_CurDir="D:\BITMAPS\DESKTOP\"

sFiles = ADIR(ListFiles,lc_CurDir+"*.JPG","AHRSD")
IF sFiles > 0
   FOR i=1 TO ALEN(ListFiles,1)
   
      IF NOT INLIST(ListFiles(i,1),".","..")   &&不處理.,..
      
         IF NOT "D" $ ListFiles(i,5)         &&不處理目錄
            cFile = lc_CurDir + ListFiles(i,1)
            
            ? cFile


         ENDIF
      ENDIF
   ENDFOR
ENDIF

*!*ListFiles說明
*!*   Column Array contents Data type
*!*   1 File names Character
*!*   2 File sizes Numeric
*!*   3 Dates last modified Date
*!*   4 Times last modified Character
*!*   5 File attributes Character

*!*   Letter Attribute
*!*   A Archive – Read/Write 
*!*   H Hidden
*!*   R Read-only
*!*   S System
*!*   D Directory

_________________
福隆昌淨水有限公司--淨水器的專家,淨水器,飲水機,濾心!!

想了解更多,您可上幸福雞湯組.找尋!!丁澐瑄.老師.

          愛作夢
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件
fash



註冊時間: 2004-07-12
文章: 5


第 2 樓

發表發表於: 星期三 九月 01, 2004 9:08 am    文章主題: 引言回覆

對不起.....我想請問一下
上列的程式裡是否有限制最多只能列出幾個目錄?
因為我參照上面的程式寫出來執行的結果是只能讀取二十個檔...
由於我是個新手..
=" =....東看西看....看不太出來是哪裡有誤?
是程式有問題還是物件方面的設定有miss?
我執行的目錄裡有29個txt,但執行到21時就停在紅色程式了
對了....我執行到紅色那行時...跑出來的錯誤訊息為註標超出定義範圍
我不太瞭它的意思...因為想請教一下高手們..


以下是我參照寫出來...

THISFORM.INLIST.ROWSOURCETYPE = 5
THISFORM.INLIST.ROWSOURCE = 'FileList'
THISFORM.INLIST.REQUERY
THISFORM.cmd_ClrSource.ENABLED = .T.

OPENDIR=GETDIR("","請設定要作業之檔案目錄")
SET DEFAULT TO &OPENDIR
sFiles = ADIR(ListFiles,"*.TXT","1")
IF sFiles > 0
FOR i=1 TO ALEN(ListFiles,1)
IF NOT INLIST(ListFiles(i,1),".","..") &&不處理.,..
IF NOT "D" $ ListFiles(i,5) &&不處理目錄
cFile = ListFiles(i,1)
FileList[CurCount] = cFile
CurCount = CurCount +1
ENDIF
ENDIF
ENDFOR
ENDIF
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
小桑•無痕



註冊時間: 2003-07-08
文章: 304
來自: Tainan, Taiwan

第 3 樓

發表發表於: 星期三 九月 01, 2004 10:19 am    文章主題: 引言回覆

fash 寫到:
對不起.....我想請問一下
上列的程式裡是否有限制最多只能列出幾個目錄?
因為我參照上面的程式寫出來執行的結果是只能讀取二十個檔...
由於我是個新手..
=" =....東看西看....看不太出來是哪裡有誤?
是程式有問題還是物件方面的設定有miss?
我執行的目錄裡有29個txt,但執行到21時就停在紅色程式了
對了....我執行到紅色那行時...跑出來的錯誤訊息為註標超出定義範圍
我不太瞭它的意思...因為想請教一下高手們..


以下是我參照寫出來...

THISFORM.INLIST.ROWSOURCETYPE = 5
THISFORM.INLIST.ROWSOURCE = 'FileList'
THISFORM.INLIST.REQUERY
THISFORM.cmd_ClrSource.ENABLED = .T.

OPENDIR=GETDIR("","請設定要作業之檔案目錄")
SET DEFAULT TO &OPENDIR
sFiles = ADIR(ListFiles,"*.TXT","1")
IF sFiles > 0
FOR i=1 TO ALEN(ListFiles,1)
IF NOT INLIST(ListFiles(i,1),".","..") &&不處理.,..
IF NOT "D" $ ListFiles(i,5) &&不處理目錄
cFile = ListFiles(i,1)
FileList[CurCount] = cFile
CurCount = CurCount +1
ENDIF
ENDIF
ENDFOR
ENDIF


這個程式好像不完整.....
FileList[CurCount] <<< 這個陣列....您有定義嗎....陣列大小?(我猜您定義20...所以執行到21時就會超出定義範圍)....
CurCount <<< 變數的初始值沒列出來(CurCount = 0)

可以的話....您可以把完整的東西POST上來(或是這部份的SAMPLE)...

_________________
用力 Try 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
小桑•無痕



註冊時間: 2003-07-08
文章: 304
來自: Tainan, Taiwan

第 4 樓

發表發表於: 星期三 九月 01, 2004 10:36 am    文章主題: Re: 分享:列出某目錄下所有檔案名稱 引言回覆

goto-dream 寫到:
分享:列出某目錄下所有檔案名稱
需使用到ADIR()

代碼:

LOCAL lScanDir,sFiles,ListFiles[1],cFile,cNewFile,i
LOCAL lcCurDir


Dear. goto-dream....
lScanDir <<< 這個變數讓我覺得...這個程式是不是有自動搜尋子目錄的版本.... Rolling Eyes

--- 我的寫法....大家也參考看看.... -----------------------------------------------------------------------------
CLEAR
CLEAR ALL
cPath = FULLPATH(GETDIR(CURDIR(),"請選擇工作目錄...."))
sFiles = ADIR(ListFiles,cPath + "*.*","AHRSD")
IF sFiles > 0
FOR I = 1 TO sFiles
? cPath + ListFiles(I,1),IIF("D" $ ListFiles(I,5)," <DIR>","")
NEXT I
ENDIF
---------------------------------------------------------------
CLEAR ALL
CLEAR
LOCAL cPath,sFiles,ListFiles[1],cFile,I
cPath = FULLPATH(GETDIR(CURDIR(),"請選擇工作目錄...."))
sFiles = ADIR(ListFiles,cPath + "*.*","AHRSD")
IF sFiles > 0
FOR I = 1 TO sFiles
IF !("D" $ ListFiles(I,5))
? cPath + ListFiles(I,1)
ENDIF
NEXT I
ENDIF

_________________
用力 Try 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
fash



註冊時間: 2004-07-12
文章: 5


第 5 樓

發表發表於: 星期三 九月 01, 2004 12:26 pm    文章主題: 引言回覆

丫......果真是我的FileList[CurCount]只定義20..
^^"....歹勢...我沒注意到這個小細節..
謝謝小桑大大幫我找出癥結..

(唉....修改別人的程式果真要面面俱到)
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
小桑•無痕



註冊時間: 2003-07-08
文章: 304
來自: Tainan, Taiwan

第 6 樓

發表發表於: 星期三 九月 01, 2004 3:18 pm    文章主題: 引言回覆

fash 寫到:
丫......果真是我的FileList[CurCount]只定義20..
^^"....歹勢...我沒注意到這個小細節..
謝謝小桑大大幫我找出癥結..

(唉....修改別人的程式果真要面面俱到)




我比較習慣動態產生 ARRAY 的大小....
(這段程式我沒測試過...您參考看看...)
--------------------------------------------
cPath = FULLPATH(GETDIR(CURDIR(),"請選擇工作目錄....")) && 注意...當 GETDIR() 按取消時...GETDIR() 會傳回""...加上 FULLPATH() 後回傳回目前程式的工作目錄...
sFiles = ADIR(ListFiles,cPath + "*.*","AHRS") && 不需要目錄資訊....可以把 D 去掉("AHRSD" -> "AHRS")
IF sFiles > 0
PUBLIC ARRAY FileList[sFiles]
FOR I = 1 TO sFiles
FileList[I] = ListFiles[I,1]
NEXT I
ELSE
*!* 找不到檔案時的處理程式 (自己寫吧)
ENDIF

_________________
用力 Try 一下...可以發現很多好玩的事....
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 雅虎訊息通 MSN Messenger
syntech



註冊時間: 2003-05-16
文章: 4249
來自: Taipei,Taiwan

第 7 樓

發表發表於: 星期三 九月 01, 2004 5:11 pm    文章主題: 引言回覆

用屬性 D 可以再找出下一層的目錄,
遞迴方式處理... Smile

我的習慣:
FILECOUNT=ADIR(FILELIST)

VFP Sample
gnDbcnumber = ADIR(gaDatabase, '*.DBC') && Create array

這樣的命名方式就滿清楚的,參考看看

_________________
如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作