Path & Folder Functions

Path & Folder Functions

ADir* Fill pre-defined arrays with file/directory information
CurDir Returns the current OS directory name
DirChange Changes the current OS directory
Directory Build an array of Directory and file information
DirMake Creates a directory
DirName Determines the name of the current directory
DirRemove Attempt to remove a directory with subdirectories
FileSeek Searches for files by name and attribute
HB_CWD Change Working Directory
HB_DirBase Drive and directory name of running executable ( application )
HB_DirBuild Creates a directory
HB_DirCreate Creates a directory
HB_DirDelete Attempt to remove a directory
HB_DirExists Tests for the existence of a directory
HB_DirScan Scan a directory tree and build a files and folders list
HB_DirTemp Returns name of temp dir of system / user
HB_DirUnbuild Attempt to remove a directory
HB_PathNormalize Normalizes the path designation by converting relative path to absolute
HB_DirSepAdd Add a dir separator to end of a path when its missing
HB_DirSepDel Delete dir separator at end of a path if exists
HB_DirSepToOS Convert dir separators in a path to OS standard dir separators
IsDir Checks if a character string contains the name of an existing directory.
IsDirectory Checks if a character string contains the name of an existing directory.
MakeDir Create a new directory
TrueName Standardizes the path designation by converting relative path to absolute

Disk / Drive Functions

Disk / Drive Functions

DiskChange Change the current OS disk drive
DiskName Returns the current OS drive name
DiskSpace Get the amount of space available on a disk
HB_DiskSpace Get the amount of space available on a disk
HB_CurDrive Returns the current OS drive name
IsDisk Verify if a drive is ready

Text File Processing

Harbour have many features for text file processing, manipulation.

Global Processing : taking text files as a single string.

MemoRead Return the text file’s contents as a character string
MemoWrit Write a memo field or character string to a text file on disk
HB_MemoRead Return the text file’s contents as a character string
HB_MemoWrit Write a memo field or character string to a text file on disk

A Class to read a text file

TFileRead Read a file one line at a time

In Harbour it’s possible also manipulate text files same as table ( .dbf ) files.

This group of function may be used for this purpose.

The basic structure is :

HB_FUse( <cTextFile> ) <-- open text file as a table

 WHILE .NOT. HB_FEof() <-- continue process for all lines in the file
c1Line := HB_FReadLN() <-- read a record (line) from file

 .... <-- process line 

 HB_FSkip() <-- advance record ( line ) pointer

 ENDDO

 HB_FUse() <-- close file

Special Text File Processing Functions

HB_FAtEOF() Chech EOF status of given work area
HB_FEof() Check end of text file status
HB_FGoBottom() Go to the last record in a text file
HB_FGoto() Move record pointer to specific record in the selected text file
HB_FGoTop() Move the record pointer to the first record in selected text file
HB_FInfo() Retrieves status information about the currently selected text file
HB_FLastRec() Get the number of records in the currently selected text file
HB_FReadAndSkip() Reads the current line and moves the record pointer to the next line
HB_FreadLN() Read a line from the selected text file without moving the record pointer
HB_FRecno() Return the current line / record number of a text file
HB_FSelect() Select a text file work area
HB_FSkip() Move the record pointer to a new position in a text file
HB_FUse() Open or close a text file for use by the HB_F* functions

A ‘global’ sample for HB_F* text  file processing functions : download.

TFP_Test_ScreenShoots

HB_FUse

HB_FUse

Open or close a text file for use by the HB_F* functions

Syntax

      HB_FUse( [ <cFile> ] [, <nMode> ] ) -> nHandle | NIL

Arguments

<cFile> : is the text file you want to open. If not specified, the file currently open, if any, will be closed.

<nMode> : is the open mode for the file. Please refer to the discussion of open modes under FOPEN() and FILEIO.CH for a list of allowable open modes. If not specified, the file will be opened with a mode of FO_READ + FO_SHARED (64).

Returns

If <cFile> is passed and the file is opened successfully, an integer containing the file handle. If the file cannot be opened, -1 will be returned.

If HB_FUse() is called without any arguments, it will close the text file in the current “text area” and return NIL.

Description

Some of HB_F*() file functions are for reading text files, that is, files where each line (record) is delimited by a CRLF pair.

Each file is opened in its own “workarea”, similar to the concept use by dbf files. As provided, a maximum of 10 files (in 10 workareas) can be opened (assuming there are sufficient file handles available).

Example

      HB_FUse( "test.txt" )      // open text file
      DO WHILE ! HB_FEOF()
         ? HB_FReadLn()
         HB_FSkip()
      ENDDO
      HB_FUse()                // close file

Seealso

HB_FAtEOF(), HB_FEof(), HB_FGoBottom(), HB_FGoto(), HB_FGoTop(), HB_FInfo(), HB_FLastRec(), HB_FReadAndSkip(), HB_FreadLN(), HB_FRecno(), HB_FSelect(), HB_FSkip()

HB_FSkip

Move the record pointer to a new position in a text file

Syntax

      HB_FSkip( [ <nLines> ] ) -> NIL

Argument

<nLines> is the number of lines to skip. Defaults to 1 if not specified.

Returns

NIL

Description

HB_FSkip moves the text file record pointer, similar to the Harbour DBSKIP() function and SKIP command.

A text file “record” is a line of text terminated by a CRLF pair.

Example

      // display each record of a text file
      HB_FUse( "test.txt" )
      DO WHILE ! HB_FEOF()
         ? HB_FReadLn()
         HB_FSkip()
      ENDDO

Seealso

HB_FAtEOF(), HB_FEof(), HB_FGoBottom(), HB_FGoto(), HB_FGoTop(), HB_FInfo(), HB_FLastRec(), HB_FReadAndSkip(), HB_FreadLN(), HB_FRecno(), HB_FSelect(), HB_FUse()

HB_FSelect

HB_FSelect()

Select a text file workarea

Syntax

      HB_FSelect( [ <nArea> ] ) -> nArea

Argument

<nArea> is the text file workarea to select.

Returns

HB_FSelect() return the current selected text file area number

Description

HB_FSelect() selects a text file “workarea” from 1 to 10. A file may or may not be open in the selected area.

Passing 0 for <nArea> selects the next available workarea, similar to Harbour’s SELECT 0 command.

Each file is opened in its own “workarea”, similar to the concept used by dbf files. As provided, a maximum of 10 files (in 10 workareas) can be opened (assuming there are sufficient file handles available).

All the HB_F*() file functions operate on the file in the currently selected text file workarea.

Text file workareas are separate from and independent of Harbour’s database workareas.

Example

      HB_FSelect(1)
      nFile1 := HB_FUse( "test.txt" )
      ? HB_FLastRec()                 // no. of lines in test.txt
      HB_FSelect(2)
      nFile2 := HB_FUse( "temp.txt" )
      ? HB_FLastRec()                 // no. of lines in temp.txt

Seealso

HB_FAtEOF(), HB_FEof(), HB_FGoBottom(), HB_FGoto(), HB_FGoTop(), HB_FInfo(), HB_FLastRec(), HB_FReadAndSkip(), HB_FreadLN(), HB_FRecno(), HB_FSkip(), HB_FUse()

HB_FRecNo

HB_FRecNo

Return the current line / record number of a text file

Syntax

      HB_FRecNo() -> nRecNo

Argument

None

Returns

HB_FRecNo() returns the current record number of a text file or 0 if no file is open.

Description

This function returns the current record number of the file open in the currently selected text file workarea.

A text file “record” is a line of text terminated by a CRLF pair.

Example

      HB_FUse( "test.txt" )      // open text file
      DO WHILE !HB_FEOF()
         ? HB_FReadLn()          // read a line / record
         HB_FSkip()              // go to next line / record
      ENDDO
      HB_FGoTop()                // go to top of file ( first line / record )
      ? HB_FRecNo()            // 1

      *˜˜˜˜˜˜˜˜˜˜˜˜˜˜

      // The example lists the lines of a text file along with
      // their line numbers

      PROCEDURE Main
         LOCAL cFile  := "text.txt"

         nFile := HB_FUse( cFile )

         DO WHILE .NOT. HB_FEof()
            ? "Line #" + LTRIM( STR( HB_FRecno() ) ), HB_FReadLN()
            HB_FSkip(1)
         ENDDO

         HB_FUse()
      RETURN

Seealso

HB_FAtEOF(), HB_FEof(), HB_FGoBottom(), HB_FGoto(), HB_FGoTop(), HB_FInfo(), HB_FLastRec(), HB_FReadAndSkip(), HB_FreadLN(), HB_FSelect(), HB_FSkip(), HB_FUse()