#INCLUDE "
COMMON.CH"
#INCLUDE "i_pseudofunc.CH"
#INCLUDE "hbcompat.CH"
#DEFINE F_NAME 1
#DEFINE F_SIZE 2
#DEFINE F_DATE 3
#DEFINE F_TIME 4
#DEFINE F_ATTR 5
ANNOUNCE RDDSYS
REQUEST DBFCDX
Function GetDirectory( CurrentDirectory_s )
Local Directory_a := {}
Local DirTable_s := "DIRTABLE"
// Local CurrentDirectory_s := CURDRIVE() + ":\" + CURDIR()
Local CurrentDirectory_s := ""
Local CurrentDate_d := DATE()
Local CurrentTime_s := TIME()
Local Fields_a := { { "FNAME", "C", 50, 0 }, ;
{ "FSIZE", "N", 15, 0 }, ;
{ "FDATE", "D", 8, 0 }, ;
{ "FTIME", "C", 10, 0 }, ;
{ "FATTR", "C", 8, 0 }, ;
{ "CURDIR", "C", 150, 0 }, ;
{ "CURDATE", "D", 8, 0 }, ;
{ "CURTIME", "C", 12, 0 } }
If CurrentDirectory_s == NIL
CurrentDirectory_s := CURDRIVE() + ":\" + CURDIR()
EndIf
SET EXCLUSIVE ON
RDDSetDefault("DBFCDX")
If File( DirTable_s + ".DBF" )
FErase( DirTable_s + ".DBF" )
EndIf
TRY
DBCREATE( DirTable_s, Fields_a, "DBFCDX", .T., "" )
CATCH
? "Error trying to create " + DirTable_s
wait
DbCloseAll()
END
Directory_a := Directory( "*.*" )
USE (DirTable_s) ALIAS DIRTABLE
AEVAL( Directory_a, { |File_a| FileAppendDirectory( File_a[F_NAME], File_a[F_SIZE], File_a[F_DATE], File_a[F_TIME], File_a[F_ATTR], CurrentDirectory_s, CurrentDate_d, CurrentTime_s ) } )
DbCloseAll()
USE (DirTable_s) ALIAS DIRTABLE
CreateDirectorySpreadsheet( CurrentDirectory_s, CurrentDate_d, CurrentTime_s )
DbCloseAll()
Return Nil
Function FileAppendDirectory( FileName_s, FileSize_n, FileDate_d, FileTime_s, FileAttribute_s, CurrentDirectory_s, Date_s, Time_s )
IF DIRTABLE->( DbAppend() )
REPLACE FNAME WITH FileName_s, FSIZE WITH FileSize_n, FDATE WITH FileDate_d, FTIME WITH FileTime_s, FATTR WITH FileAttribute_s, CURDIR WITH CurrentDirectory_s, CURDATE WITH Date_s, CURTIME WITH Time_s
ENDIF
Return Nil
FUNCTION CreateDirectorySpreadsheet( CurrentDirectory_s, CurrentDate_d, CurrentTime_s )
Local ExcelFile_s := "DIRTABLE.xlsx"
LOCAL workbook
LOCAL worksheet
LOCAL format
Local row_n := 0
TRY
IF File(ExcelFile_s)
FErase(ExcelFile_s)
ENDIF
CATCH
? 'Error trying to Erase DIRTABLE.xlsx'
wait
DbCloseAll()
Quit
END
/* Create a new workbook and add a worksheet. */
TRY
workbook := workbook_new( ExcelFile_s )
CATCH
? 'Error trying to create ' + ExcelFile_s
wait
DbCloseAll()
Quit
END
worksheet := workbook_add_worksheet( workbook )
/* Add a format. */
format := workbook_add_format( workbook )
format_set_bold( format )
worksheet_set_column( worksheet, 0, 0, 50)
worksheet_write_string( worksheet, row_n, 0, "FileName", format )
worksheet_set_column( worksheet, 1, 1, 12)
worksheet_write_string( worksheet, row_n, 1, "FileSize", format )
worksheet_set_column( worksheet, 2, 2, 15)
worksheet_write_string( worksheet, row_n, 2, "FileDate", format )
worksheet_set_column( worksheet, 3, 4, 10)
worksheet_write_string( worksheet, row_n, 3, "FileTime", format )
worksheet_set_column( worksheet, 4, 4, 15 )
worksheet_write_string( worksheet, row_n, 4, "FileAttribute", format )
worksheet_set_column( worksheet, 5, 5, 150)
worksheet_write_string( worksheet, row_n, 5, "CurrentFolder", format )
worksheet_set_column( worksheet, 6, 6, 15)
worksheet_write_string( worksheet, row_n, 6, "CurrentDate", format )
worksheet_set_column( worksheet, 7, 7, 12)
worksheet_write_string( worksheet, row_n, 7, "CurrentTime", format )
row_n++
DIRTABLE->(DbGoTop())
DO While .NOT. DIRTABLE->( Eof() )
worksheet_write_string( worksheet, row_n, 0, DIRTABLE->FNAME )
worksheet_write_number( worksheet, row_n, 1, DIRTABLE->FSIZE )
worksheet_write_string( worksheet, row_n, 2, DTOS(DIRTABLE->FDATE) )
worksheet_write_string( worksheet, row_n, 3, DIRTABLE->FTIME )
worksheet_write_string( worksheet, row_n, 4, DIRTABLE->FATTR )
worksheet_write_string( worksheet, row_n, 5, CurrentDirectory_s )
worksheet_write_string( worksheet, row_n, 6, DTOS(CurrentDate_d) )
worksheet_write_string( worksheet, row_n, 7, CurrentTime_s )
DIRTABLE->(DbSkip())
row_n++
EndDo
TRY
/* Save the workbook and free any allocated memory. */
workbook_close( workbook )
CATCH
? 'Error trying to close DIRTABLE.xlsx'
wait
DbCloseAll()
Quit
END
RETURN Nil