文件和文件夾函數提供一個全面的方法來處理文本文件,二進制文件和文件夾。許多函數使用變量TARGETDIR 和SRCDIR做爲路徑並只接受文件名做爲參數。適當時也接受通配符。
ChangeDirectory
使指定的目錄爲當前目錄。
CloseFile
關閉一個打開的文件。
CopyFile
將一個文件從一個文件夾拷貝到另外一個。
CreateDir
建立一個新文件夾。
CreateFile
建立一個指定文件名的文件。
DeleteDir
刪除一個文件夾。
DeleteFile
刪除一個文件。
ExistsDir
肯定指定目錄是否存在。
ExistsDisk
肯定指定磁盤是否存在。
FileCompare
將一個文件和另外一個比較。
FileDeleteLine
刪除一個文本文件中的一行。
FileGrep
在一個文本文件中查找指定文本。
FileInsertLine
在一個文本文件中插入一行。
FindAllDirs
查找指定文件夾下的全部子文件夾。
FindAllFiles
查找指定文件夾中的全部和一個文件說明匹配的文件和它的子文件夾。
FindFile
查找在指定文件夾中和一個文件說明匹配的第一個文件。
GetFileInfo
檢索一個文件的屬性,日期,時間和大小。
GetLine
從一個打開的文件中檢索一行文本。
OpenFile
打開一現存文件。
OpenFileMode
用OpenFile函數設置文件打開的方式。
ReadBytes
從一個二進制文件中讀取指定的字節數。
RenameFile
改名一個文件。
SeekBytes
在一個二進制文件中定位文件指針。
SetFileInfo
設置一個文件的屬性,日期和時間。
WriteBytes
在一個二進制文件的當前文件指針位置寫入指定數目的字節。
WriteLine
將一個字符串寫入一個文本文件。
XCopyFile
將一個或多個文件從一個源文件夾拷貝到一個目標文件夾,若是指定則包括子文件夾。
相關函數
SelectDir
請參閱4.10。
9.1 ChangeDirectory
語法:ChangeDirectory (szPath);
說明:ChangeDirectory函數設置當前目錄。
參數:
szPath
指定要被設置爲當前目錄的目錄名。該名能夠是一個全限定路徑名或一個UNC路徑;它必須不包括一個尾隨反斜槓。若有必要,在調用ChangeDirectory前調用StrRemoveLastSlash。
返回值:
0:ChangeDirectory成功設置指定目錄爲當前目錄。
< 0:ChangeDirectory未能設置指定目錄爲當前目錄。
註解:
·注意在你調用ChangeDirectory將一個指定目錄設爲當前目錄後,該目錄不能被刪除。在你能夠刪除該目錄前,你必須再次調用ChangeDirectory來設置一個不一樣的當前目錄。
9.2 CloseFile
語法:CloseFile (nvFileHandle);
說明:CloseFile函數關閉一個已經由調用OpenFile打開的文件。在你關閉一個文件後,你不能從中讀或寫到該文件。
參數:
nvFileHandle
指定要關閉的文件的句柄。
返回值:
0:代表該函數成功關閉該文件。
< 0:代表該函數未能關閉該文件。
9.3 CopyFile
語法:CopyFile (szSrcFile, szTargetFile);
說明:CopyFile函數建立一個由參數szSrcFile指定的文件的拷貝。新文件由參數szTargetFile指定文件名。
參數:
szSrcFile
指定要拷貝的文件的文件名。若是該文件名是限定的,也就是,若是它包括一個路徑,CopyFile將從指定位置拷貝該文件。若是szSrcFile包含一個未限定文件名,也就是,沒有路徑信息,CopyFile將從由系統變量SRCDIR標識的路徑拷貝。爲拷貝一組文件,在該參數位置使用通配符。
szTargetFile
指定給由szSrcFile標識的文件的拷貝的名稱。若是文件名是限定的,也就是,若是它包含一個路徑,CopyFile將把文件拷貝到路徑指定的位置。若是szSrcFile包含一個未限定文件名,也就是,沒有路徑信息,拷貝將被建立在由系統變量TARGETDIR指定的目錄中。若是目標目錄不存在,它將被建立。
當由szSrcFile指定的文件名中包含一個通配符時,szTargetFile的文件名部分被忽略;每一個源文件以它的現存名被拷貝到由szTargetFile指定的路徑。若是szTargetFile包含一個未限定文件名,文件將被拷貝到由系統變量TARGETDIR指定的目錄中。所以,CopyFile不能被用來拷貝和重命名一組文件。當szSrcFile包含一個或多個通配符時,源目錄和目標目錄必須不一樣。
返回值:
0:代表函數成功地從源目錄拷貝文件至目標目錄。
< 0:代表函數因下列狀況之一未能拷貝所要文件:
COPY_ERR_CREATEDIR (-27):目標目錄不能被建立。確保系統變量TARGETDIR中的路徑語法正確而且你有權訪問目標驅動器。
COPY_ERR_MEMORY (-6):函數未能分配完成拷貝文件進程所需的內存。儘量多地終止正在運行的應用程序以釋放內存。
COPY_ERR_NODISKSPACE (-38):函數未能在目標驅動器上找到足夠的磁盤空間來拷貝文件。在目標驅動器上釋放磁盤空間。
COPY_ERR_OPENINPUT (-2):函數未能打開系統變量SRCDIR指定的輸入文件。確保源文件有一個有效的文件名而且源文件和目標目錄都存在。
COPY_ERR_OPENOUTPUT (-3):函數未能拷貝所要文件。
COPY_ERR_TARGETREADONLY (-46):TARGETDIR中的文件是隻讀文件。刪除目標文件的只讀屬性並重試。
全部其它負值:代表發生一些其它不肯定錯誤。
註解:
·若是你使用未限定文件名並在使用CopyFile時設置SRCDIR和 TARGETDIR的值,在調用CopyFile前用VarSave保存當前值並而後用VarRestore從新設置。若是目標目錄不存在,CopyFile建立它。
·你不能經過調用CopyFile時使用通配符來重命名一組文件。然而,單獨一個文件時你可使用CopyFile來作到。
·爲包括子目錄,調用XcopyFile函數。
·對於文件傳輸,XCopyFile 是CopyFile的一個完美替換。XCopyFile能夠作版本檢測,標記鎖定的.dll和.exe文件待系統重啓後更新,而且遞增共享的.dll和.exe文件的註冊表訪問計數器。
·由於Windows 95及更高版本不容許一個空文件被拷貝,Windows NT不容許建立空文件,CopyFile在這些平臺下當被用來拷貝空文件(Size=0KB)時將不工做。
· 在用WriteProfString 或 WriteProfInt修改.ini文件後, Windows 95及更高版本下,你必須在使用CopyFile前刷新高速緩存。全部.ini文件在Windows 95及更高版本下被放在高速緩存中;這種特性可能致使延遲將修改寫到指定文件。這接着可能妨礙隨後的文件操做。爲避免這個問題,簡單地以空參數調用WriteProfString來強制Windows 95 及更高版本當即寫數據到.ini文件,以下所示:
WriteProfString ("C:\\Test.ini", "Windows", "KeyboardDelay", "100");
file://null string ("") for all four parameters
WriteProfString ("", "", "", "");
file://CopyFile should now have access to updated file.
CopyFile ("C:\\Test.ini", "C:\\Temp\\Test.ini");
9.4 CreateDir
語法:CreateDir (szDirPath);
說明:CreateDir函數在目標驅動器上建立一個或多個子目錄。你可使用一個包含多層子目錄的路徑,如C:\Programs\Winapps\Myapp。任何路徑中不存在的子目錄,CreatDir將建立它。例如,若是C:\Programs\Winapps 和 C:\Programs\Winapps\Myapp都不存在,這些子目錄將都被CreatDir建立。
參數:
szDirPath
指定要建立的子目錄的全限定路徑。將路徑中的每層用一個反斜槓分隔(經過使用反斜槓轉義符(\\))。
返回值:
0:代表函數在目標驅動器上成功建立指定目錄或指定目錄已經存在。
< 0:代表指定目錄不存在而且函數未能建立指定它。
註解:
下列狀況下CreatDir將失敗:
路徑非法;
驅動器或路徑上的任何子目錄是寫保護的;
驅動器名無效;
你沒有網絡特權來建立子目錄。
9.5 CreateFile
語法:CreateFile (nvFileHandle, szPath, szFileName);
說明:CreateFile函數建立一個新文件。若是相同名的文件已經存在,CreateFile改寫它。在你用CreateFile建立一個文件前,你必須用OpenFileMode設置文件方式。
CreateFile將新建立的文件打開爲讀/寫(二進制文件)或添加(文本文件)方式,所以你可使用其它函數,如GetLine, ReadBytes, WriteLine和 WriteBytes.來從文件中讀或寫到文件中。
除了讀/寫或添加方式,全部新建立文件自動打開爲OF_SHARE_DENY_NONE方式。這意謂着文件被打開爲不拒絕其它程序對它的讀或寫。這種方式的根段記錄在Windows OpenFile API中。當你結束從一個文件讀或對它寫時,你必須使用CloseFile函數來關閉該文件。
參數:
nvFileHandle
返回新文件的句柄。
szPath
指定新文件建立所在的子目錄的全限定路徑。
szFileName
指定建立的文件的文件名。
返回值:
0:代表函數成功建立新文件。
< 0:代表函數未能建立新文件。
註解:
·CreateFile建立一個新文件並把它打開以便你能夠重新文件中讀或寫到新文件中。爲寫到一個現存文件中,你必須首先用OpenFileMode 和OpenFile函數以FILE_MODE_APPEND方式打開文件。
·當操做日誌被激活時,CreateFile的函數操做不存入到卸載記錄中。若是你想要一個由CreatFile建立的文件被存入到卸載記錄中,則當存入功能被激活時,使用XcopyFile傳輸一個啓動程序文件(以你要的文件名)到目標系統。你用Enable 和Disable函數激活和禁用存入功能。當存入功能被激活時,XcopyFile操做被存入,啓動程序文件被存入後,你可使用CreatFile和其它文件相關函數來寫或改寫被存入的啓動程序文件。文件名必須保持不變不然它不會在卸載記錄中找到。
9.6 DeleteDir
語法:DeleteDir(szDir, nFlag);
說明:DeleteDir函數刪除一個子目錄。根據你在參數nFlag使用的值,你能夠僅當子目錄爲空時刪除它,即便子目錄包含文件也刪除它,或刪除整個根目錄。設置nFlag需特別謹慎。
參數:
szDir
指定要被刪除的目錄的全限定名。
nFlag
指定刪除選項。在該參數位置傳遞下列預約義常量之一:
ALLCONTENTS:刪除szDir指定的目錄,包括其下的全部子目錄和文件。你刪除的目錄必須是一個子目錄,不能是驅動器上的一個根目錄。
ONLYDIR:僅當szDir指定的目錄爲空時才刪除它。不然函數失敗。
ROOT:即便szDir指定的目錄是根目錄也要刪除它。若是szDir是一個根目錄,DeleteDir將刪除磁盤上一切東西。
返回值:
0:代表函數成功刪除子目錄。
< 0:代表函數未能刪除子目錄。
註解:
·你不能刪除當前目錄。
·你不能刪除一個網絡系統上你沒有適當權利的文件。
·DeleteDir不能刪除只讀,隱藏或系統文件。
·若是DeleteDir遇到一個只讀文件,該函數可能在只刪除子目錄中一些文件後失敗。
9.7 DeleteFile
語法:DeleteFile (szFile);
說明:DeleteFile函數刪除一個或多個文件。注意DeleteFile不能刪除只讀,隱藏或系統文件。若是你試圖刪除一個網絡系統上你沒有適當文件權利的文件時,該函數不起做用。
參數:
szFile
指定要刪除文件的名稱。若是szFile指定一個全限定名,也就是,包括一個路徑,DeleteFile將從指定目錄刪除該文件。若是szFile包含一個未限定文件名,也就是,沒有路徑信息,DeleteFile將從由系統變量TARGETDIR指定的目錄中刪除文件。能夠在szFile中包含通配符來刪除多個文件。
返回值:
0:代表函數成功刪除指定文件。
< 0:代表函數未能刪除指定文件。
註解:
你在使用FindFile時可使用通配符來定位文件而後用DeleteFile刪除它們。
9.8 ExistsDir
語法:ExistsDir (szPath);
說明:ExistsDir函數在目標系統上檢測指定目錄的存在性。
參數:
szPath
指定要在目標系統上找到的目錄的全限定路徑。
返回值:
EXISTS (0):代表指定目錄存在於目標系統上。
NOTEXISTS (-1):代表指定目錄不存在於目標系統上。
9.9 ExistsDisk
語法:ExistsDisk (szDisk);
說明:ExistsDisk函數在目標系統上檢測指定磁盤驅動器的存在性。
參數:
szDisk
指定磁盤驅動器字符。
返回值:
EXISTS (0):代表目標系統上存在指定驅動器。
NOTEXISTS (-1):代表目標系統上不存在指定驅動器。
9.10 FileCompare
語法:FileCompare (szFileName1, szFileName2, nCompareFlag);
說明:FileCompare函數比較兩個文件的大小,日期或版本。
參數:
szFileName1
指定要比較的第一個文件的全限定名。
szFileName2
指定要比較的第二個文件的全限定名。
nCompareFlag
指定比較選項。在該參數位置傳遞下列預約義常量之一:
COMPARE_SIZE:比較兩個文件的大小。
COMPARE_DATE:比較兩個文件的日期。
COMPARE_VERSION:比較兩個文件的版本資源。
返回值:
EQUALS (2):第一個文件的日期,大小或版本和第二個的相等。
FILE_NOT_FOUND (-2):函數未能找到一個文件或都未能找到。
GREATER_THAN (0):第一個文件比第二個文件更新或更大,根據在參數nCompareFlag使用的常量:
.COMPARE_VERSION
文件一比文件二新。
.COMPARE_DATE
文件一比文件二日期後。
.COMPARE_SIZE
文件一比文件二大。
.LESS_THAN (1)
文件一比文件二舊或小。
OTHER_FAILURE (-1)
發生不肯定錯誤。
9.11 FileDeleteLine
語法:FileDeleteLine (szFileName, nStartLineNum, nEndLineNum);
說明:FileDeleteLine函數從一個文本文件中使用一個起始行和結束行行號來刪除該區域的行(包括起始行和結束行)。該函數做用於面向行的文本文件;它不做用於二進制文件。你可使用FileDeleteLine 和FileGrep函數來查找和刪除一個文件中的文本行。
由szFileName指定的文件必須還沒有經過調用OpenFile被打開。若是szFileName已經被打開,在調用FileDeleteLine前調用CloseFile。
參數:
szFileName
指定文件的全限定名,它位於系統變量SRCDIR指定的目錄中。若是該文件存在,由nStartLineNum 和nEndLineNum指定的行將從該文件中刪除。
nStartLineNum
指定要從文件中刪除的第一行的行號。注意行從0開始編號。
nEndLineNum
指定要從文件中刪除的最後一行的行號。注意行從0開始編號。爲了從nStartLineNum指定的行開始刪除到文件結尾,給該參數傳遞預約義常量DELETE_EOF。
返回值:
0:FileDeleteLine從該文件成功刪除指定行。
< 0:FileDeleteLine由於下列狀況之一而失敗:
FILE_NOT_FOUND (-2):InstallShield未能找到szFileName指定的文件。
FILE_RD_ONLY (-5):文件是寫保護的。
LINE_NUMBER (-7):一個你所指定的行號小於0,或者文件中沒有該行號。
OUT_OF_DISK_SPACE (-6):沒有足夠的磁盤驅動器空間來完成指定操做。
OTHER_FAILURE (-1):發生其它一些不肯定錯誤。
9.12 FileGrep
語法:FileGrep (szFileName, szSearchStr, svReturnLine, nvLineNumber, nFlag);
說明:FileGrep函數在一個文本文件中查找一個指定字符串。若是字符串被找到,包含該字符串的行被返回到參數svReturnLine,該行的行號被返回到參數nvLineNumber。查找不區分大小寫。FileGrep做用於面向行的文本文件;它不做用於二進制文件。
在用FileGrep查找一個文件以前沒有必要打開它;你也無須在調用FileGrep以後關閉它。文件打開和文件關閉由FileGrep自動執行。雖然多數狀況下,FileGrep對一個已經被打開的文件(先前調用OpenFile的結果)將成功執行,但若是文件是以添加方式打開時,FileGrep將返回FILE_NOT_FOUND。
參數:
szFileName
指定要查找的文件的全限定名。
szSearchStr
指定查找字符串。
svReturnLine
返回szSearchStr被找到的行。
nvLineNumber
返回szSearchStr被找到的行的行號。行以0開始編號。
nFlag
指定查找選項。在該參數位置傳遞下列預約義常量之一:
CONTINUE:檢索查找字符串的下一個出現(若是有)。
RESTART:檢索查找字符串的第一次出現。
返回值:
0:FileGrep找到指定字符串。
< 0:FileGrep因下列狀況之一而失敗:
END_OF_FILE (-4):沒有找到查找字符串而已到文件尾。
FILE_NOT_FOUND (-2):InstallShield未能找到szFileName指定的文件。
FILE_LINE_LENGTH (-3):行超過容許的最大長度。
OTHER_FAILURE (-1):發生一個不肯定錯誤。
9.13 FileInsertLine
語法:FileInsertLine (szFileName, szInsertLine, nLineNumber, nInsertFlag);
說明:FileInsertLine函數經過指定行號來插入或置換一行。你能夠將FileInsertLine 和 FileGrep一塊兒使用,FileGrep找到行並返回它們的行號。
FileInsertLine工做於面向行的且每行不超過1,024字節的文本文件。InstallShield假定任何長於最大容許長度的行代表了這是一個二進制文件而致使FileInsertLine失敗。
由szFileName指定的文件必須還沒有經過調用OpenFile被打開。若是szFileName已經被打開,在調用FileInsertLine前調用CloseFile。
參數:
szFileName
指定文件的全限定名,它位於系統變量SRCDIR指定的目錄中。若是該文件存在,則將szInsertLine的值插入其中。
szInsertLine
指定插入到文件中的字符串。
nLineNumber
指定你要將szInsertLine插入到的行號。第一行行號是0。
nInsertFlag
指定一個插入位置選項。在該參數位置傳遞下列預約義常量之一:
BEFORE:在nLineNumber前插入。
AFTER:在nLineNumber後插入。
APPEND;將szInsertLine添加到nLineNumber指定的行。
REPLACE:用szInsertLine 置換nLineNumber指定的行。
返回值:
0:FileInsertLine成功插入行到指定文件。
FILE_LINE_LENGTH (-3):代表行長超過文本文件容許的最大長度。
FILE_NOT_FOUND (-2):FileInsertLine未能找到szFileName指定的文件。
FILE_RD_ONLY (-5):代表文件寫保護。
LINE_NUMBER (-7):代表你指定的行號之一小於0,或在文件中不存在該行號。
OUT_OF_DISK_SPACE (-6):代表沒有足夠的磁盤驅動器空間來完成指定操做。
OTHER_FAILURE (-1):發生一個不肯定錯誤。
9.14 FindAllDirs
語法:FindAllDirs (szDir, nOp, listDirs);
說明:FindAllDirs查找整個磁盤或目錄的結構並返回一個子目錄名的字符串列表。若是nOp 是INCLUDE_SUBDIR,查找從szDir指定的目錄開始並繼續查找子目錄結構。
參數:
szDir
指定查找的目錄名。
nOp
指定是否要查找szDir下的全部子目錄。在該參數位置傳遞下列預約義常量之一:
EXCLUDE_SUBDIR:不包括子目錄。
INCLUDE_SUBDIR:包括子目錄。
listDirs
返回全限定目錄名列表。listDirs標識的字符串列表必須已經經過調用ListCreat被初始化。
返回值:
0:FindAllDirs成功生成子目錄名列表。
< 0:FindAllDirs未能生成一個列表。
註解:
·FindAllDirs從指定目錄開始查找一個分層子目錄結構。若是指定目錄是一個根目錄而且nOp 包含INCLUDE_SUBDIR,則返回整個磁盤上的全部目錄名。你可使用FindAllDirs來找到一個特定目錄的子目錄,或你可使用它來找到一個磁盤上的全部目錄。
9.15 FindAllFiles
語法:FindAllFiles (szDir, szFileName, svResult, nOp);
說明:FindAllFiles函數查找一個整個子目錄結構並返回第一個有特定文件說明的文件的文件名。若是傳遞給nOp的變元是RESET,InstallShield在參數szDir指定的目錄中開始查找並繼續在其子目錄結構中查找直到它找到與szFileName匹配的一個文件。若是nOp等於CONTINUE,查找從函數上次被調用時離開的地方繼續。重複調用該函數來找到全部出現的與szFileName匹配的文件。
參數:
szDir
指定要查找的目錄名。
szFileName
指定要查找的文件說明。該參數容許通配符。
svResult
若是找到則返回第一個匹配文件的全限定名。若是FindAllFiles失敗,svResult保持不變。
nOp
指示查找選項。在該參數位置傳遞下列預約義常量之一:
CONTINUE:在前一個查找中止的位置繼續查找。
RESET:在szDir指定的目錄開始處開始查找。
CANCEL:釋放先前調用FindAllFiles時訪問的全部文件和文件夾。運行在Windows NT下的安裝中,以該參數調用FindAllFiles來確保隨後的對已經由FindAllFiles訪問過的文件和文件夾的操做成功。
爲找到全部與文件說明匹配的文件,可按下列步驟進行:
1.將要查找的文件夾名賦給szDir。
2.將文件說明賦給szFileName,如IS5*.txt。
3.將nOp設置爲RESET,調用FindAllFiles。
4.當FindAllFiles的返回碼是0時,保存svResult返回的文件名;而後調用FindAllFiles, nOp 設置爲 CONTINUE.。
5.最後,運行在Windows NT下的安裝中,調用FindAllFiles ,nOp設置爲CANCEL
返回值:
0:代表函數檢索並返回一個與說明匹配的文件。
< 0:代表函數未能找到一個與說明匹配的文件。
註解:
·該函數從指定目錄開始查找一個分層子目錄結構。若是指定目錄是一個根目錄,InstallShiled查找整個磁盤。函數在它找到的第一個匹配文件名處中止。
·第一次你調用該函數來開始一個新的查找,設置nOp爲RESET。你能夠經過設置nOp爲CONTINUE來繼續查找指定文件的全部其它出現,並可把該函數調用放在一個循環中,以 FindAllFiles函數失敗爲結束。
·你不能在一個FindAllFiles(..., RESET)和FindAllFiles(..., CONTINUE) 循環中使用Xcopyfile函數。若是你在一個FindAllFiles循環中調用XcopyFile,由FindAllFiles(..., CONTINUE)返回的文件名可能不正確。
9.16 FindFile
語法:FindFile (szPath, szFileName, svResult);
說明:FindFile函數在一個目錄中查找一指定文件。InstallShield在參數svResult返回第一個匹配的文件。
參數:
szPath
指定要查找的目錄名。該目錄下的子目錄不被查找。
szFileName
指定要查找的文件名。該參數容許通配符。
svResult
返回與szFileName匹配的第一個文件的文件名。該參數包含未限定文件名(也就是,不包括驅動器指示符和路徑)。
返回值:
0:代表函數成功找到並返回指定文件。
< 0:代表函數未能找到文件。
註解:
·該函數只查找指定子目錄。它不查找整個磁盤或目錄樹。
9.17 GetFileInfo
語法:GetFileInfo (szPathName, nType, nvResult, svResult);
說明:調用GetFileInfo函數來肯定一個文件的屬性,日期,時間或大小。每一個GetFileInfo語句中,你只能夠要求這些數據項中的一個。例如,爲獲得一個文件的日期和時間信息,你必須調用GetFileInfo兩次,一次取得日期,一次取得時間。
參數:
szPathName
指定你要檢索其信息的文件的全限定名。
nType
指定要檢索的信息類型。若是該信息是一個數字,GetFileInfo把它放到nvResult。若是信息是一個字符串,GetFileInfo把它放到svResult。在該參數位置傳遞下列預約義常量之一:
FILE_ATTRIBUTE:文件屬性在nvResult返回。看註解。
FILE_DATE:文件日期以YYYY\MM\DD格式返回到svResult。
FILE_SIZE:大小以字節數返回到nvResult。
FILE_TIME:文件時間以HH:MM:SS格式返回到svResult。
nvResult
返回數值型信息。
svResult
返回字符串型信息。
返回值:
0:代表函數成功檢索所需文件信息。
< 0:代表函數未能檢索所需文件信息。
註解:
·在以FILE_ATTRIBUTE爲第二個參數(nType),調用GetFileInfo後,使用if-then-else邏輯來肯定文件屬性。若是nvResult = FILE_ATTR_NORMAL,那麼沒有設置文件屬性。若是nvResult <> FILE_ATTR_NORMAL,對nvResult和一個或多個文件屬性常量用按位與操做符來肯定設置了哪一個屬性。
if (nvResult = FILE_ATTR_NORMAL) then
file://The file is NORMAL.
else
if (FILE_ATTR_HIDDEN & nvResult) then
file://The file is HIDDEN.
endif;
if (FILE_ATTR_READONLY & nvResult) then
file://The file is READ-ONLY.
endif;
endif;
9.18 GetLine
語法:GetLine (nvFileHandle, svLine);
說明:GetLine函數從一個只讀方式打開的文本文件中讀取一行。在你調用GetLine以前,你必須首先調用openFileMode來設置文件方式爲只讀,而後調用OpenFile來打開該文件。對GetLine的第一次調用從文件中讀取第一行文本。讀取一行後,GetLine把文件指針從新定位到下一行。對GetLine的第二次調用讀取第二行,如此繼續。GetLine從它返回的行中去除回車和換行字符。
爲寫到一個文本文件,使用WriteLine函數。WriteLine老是生成在行尾有一個回車和換行字符組合的行。
參數:
nvFileHandle
指定已經由調用OpenFile打開的文件的句柄。
svLine
返回從nvFileHandle指定的文件中返回的一行文本。
返回值:
0:代表函數從一個打開的文本文件中成功檢索一行文本。
< 0:代表函數因到文件尾或其它錯誤狀況而失敗。這種狀況也代表GetLine已經讀取了該文件中的全部行。
註解:
·一行的最大長度是4,096個字符。爲從一個文件中讀取多行,每讀一行都單獨調用一次GetLine或把GetLine語句放在一個循環中。
·當GetLine已經讀取了文件中的全部行,則返回一個文件尾(end-of-file)的錯誤。注意若是你以添加方式打開一個文件,你調用GetLine函數時將失敗由於文件指針在文件尾。若是由nvFileHandle指定的文件以二進制方式打開,則該函數也會失敗。
9.19 OpenFile
語法:OpenFile (nvFileHandle, szPath, szFileName);
說明:OpenFile函數打開一個文本文件或二進制文件。在你打開該文件前,你必須經過調用OpenFileMode設置文件方式。
你打開一個文本文件後,調用GetLine 和 WriteLine來對文件讀和寫。你打開一個二進制文件後,調用ReadBytes 和 WriteBytes來對文件讀和寫。在對一個二進制文件寫以前,你可能須要使用SeekBytes來定位文件指針。
你也可使用FileGrep, FileInsertLine, 和 FileDeleteLine函數來對文本文件進行查找,讀和寫。然而,這些函數不要求你打開或關閉文件(這被內部處理)。根據你的須要,這些函數能夠提供給你更好的服務。當你用GetLine 或 WriteLine完成對一個文件的讀或寫後,你必須調用CloseFile函數來關閉該文件。
使用CreateFile來建立一個文件。CreateFile以添加方式(文本文件)或讀/寫方式(二進制文件)打開新文件。
參數:
nvFileHandle
返回被打開文件的句柄。當你調用InstallShield中其它文件相關函數時,使用該句柄來標識該文件。
szPath
指定你要打開的文件的路徑(可能包含一個驅動器指示符)。
szFileName
指定你要打開的文件的未限定名(也就是,沒有一個驅動器指示符或路徑)。
返回值:
0:代表函數成功打開文件。
< 0:代表函數未能打開文件。
9.20 OpenFileMode
語法:OpenFileMode (nMode);
說明:OpenFileMode函數設置你要打開或建立的文件的方式。你傳遞給參數nMode的變元設置文件方式爲下列之一:
文本文件爲添加方式;
文本文件爲只讀方式;
二進制文件爲讀/寫方式;
二進制文件爲只讀方式。
你設置文件方式後,調用OpenFile 來打開一個現存文件或調用CreateFile來建立和打開一個新文件。
參數:
nMode
指定以何種方式打開一個文件。在該參數位置傳遞下列預約義常量之一:
FILE_MODE_APPEND:該常量容許一個文本文件以添加方式被打開或被建立。當一個文件以添加方式由OpenFile打開時,文件指針在文件尾。你可使用WriteLine函數添加行到文件尾。用CreateFile建立的文件是新的(空的),所以添加到文件中的行被寫到文件的開始。注意若是你以添加方式打開一個文件,若是你調用GetLine函數,它會失敗,由於文件指針在文件尾。
FILE_MODE_NORMAL:該常量容許一個文本文件以只讀方式被打開。當一個文件以只讀方式由OpenFile打開時,文件指針在文件頭。你可使用GetLine函數來讀文件。當FILE_MODE_NORMAL有效時,用CreateFile建立的文件實際將以FILE_MODE_APPEND方式建立。
FILE_MODE_BINARY:該常量容許一個二進制文件以讀/寫方式打開或建立。當你用OpenFile 或 CreateFile打開或建立一個二進制方式文件時,你能夠調用ReadBytes從該文件讀和調用WriteBytes來寫到該文件。寫到一個二進制文件中時從當前的文件指針位置開始,對於一個新打開或建立的文件該位置是0,即文件的開始。若是你要添加到一個用OpenFile打開的二進制文件時,你必須在寫以前使用SeekBytes來定位文件指針。爲打開一個CD-ROM或一個只讀驅動器上的文件時,調用OpenFileMode來設置文件方式爲只讀(FILE_MODE_BINARYREADONLY)。
FILE_MODE_BINARYREADONLY:該常量和FILE_MODE_BINARY常量相似,除了它以只讀方式打開二進制文件。當打開CD-ROM或只讀驅動器上的一個二進制文件時,使用該常量來打開一個二進制文件。FILE_MODE_BINARY會在打開CD-ROM或只讀驅動器上的二進制文件時失敗。
返回值:
0:代表函數成功設置文件方式。
< 0:代表函數未能設置文件方式。
9.21 ReadBytes
語法:ReadBytes (nFileHandle, svString, nIndex, nBytes);
說明:ReadBytes函數從一個文件中當前文件指針開始讀取指定數目的字節。當該函數返回時,InstallShield將文件指針從新定位到從文件中讀取字節的結束位置。
你必須調用OpenFileMode 和 OpenFile以二進制方式打開文件,而後才能從中讀取。
參數nIndex是svString指定的值中的下標。使用參數nBytes來指定在文件中從參數 nIndex指定處開始讀取多少字節。若是nIndex加上nBytes的值大於svString的長度,只從文件中讀出字符串中指定下標開始到字符串結尾的字節數。例如,若是svString聲明爲100個字節長,參數nIndex聲明爲50字節,參數nBytes爲75字節,則只有49到99之間的字節(50個字節,而不是75個字節)被讀出。
參數:
nFileHandle
指定以二進制方式打開的文件的文件句柄。
svString
返回從文件中讀出的字節。傳遞給該參數的變量必須已經被聲明爲顯式大小,而且它必須足夠大來容納由nBytes指定數目的字節。
nIndex
指定svString中的一個下標;文件中的數據在這個位置被插入到字符串。
nBytes
指定從文件中讀取的字節數。字節從文件指針當前位置開始讀取。字節被讀取時,InstallShield從新定位文件指針。
返回值:
X:代表函數從文件中成功讀取字節,X是實際返回到svString的字節數。
< 0:代表函數未能從文件中讀取字節。
9.22 RenameFile
語法:RenameFile (szSrcFile, szTargetFile);
說明:RenameFile函數修改文件名和/或將一個文件從一個目錄移動到另外一個目錄。
參數:
szSrcFile
指定要被改名或移動的文件的文件名。若是szSrcFile指定一個全限定名,也就是,若是它包括一個路徑,RenameFile將改名或移動指定目錄下的文件。若是szSrcFile包含一個未限定名,也就是,沒有路徑信息,RenameFile將改名或移動到系統變量SRCDIR指定的目錄下的文件。注意不容許通配符;每次調用RenameFile只能改名或移動一個文件。
szTargetFile
爲文件指定一個新名和/或新位置。若是szTargetFile指定一個全限定名,也就是,若是它包括一個路徑,RenameFile將改名或移動文件到指定目錄下。若是szTargetFile包含一個未限定名,也就是,沒有路徑信息,RenameFile將文件改名或移動到系統變量SRCDIR指定的目錄下。看下面的註解。
返回值:
0:代表函數成功修改文件名或移動文件。
< 0:代表函數未能修改文件名或移動文件。
註解:
·若是szSrcFile 和 szTargetFile指向相同目錄(或當使用未限定名時,SRCDIR 和 TARGETDIR指向相同目錄),則由szSrcFile指定的文件將被改名,除非由szTargetFile指定的文件已經存在於該目錄下。
·若是szSrcFile 和 szTargetFile指向不一樣目錄(或當使用未限定名時,SRCDIR 和 TARGETDIR指向不一樣目錄),則由szSrcFile指定的文件將被移動到新目錄並命名爲由szTargetFile指定的名稱,除非由szTargetFile指定的文件已經存在於該目錄下。
9.23 SeekBytes
語法:SeekBytes (nFileHandle, nBytes, nPosition);
說明:SeekBytes函數在一個打開的二進制文件中從新定位文件指針。你能夠以相對於當前位置或相對於文件頭或尾一個特定字節數來移動文件指針。調用SeekBytes前,你必須經過OpenFileMode 和 OpenFile以二進制方式打開文件。當你結束寫字節到文件時,調用CloseFile來關閉文件。
參數:
nFileHandle
指定以二進制方式打開的文件的文件句柄。
nBytes
指定文件指針相對於nPosition指定的位置要移動的字節數。若是nBytes是一個整數,文件指針向文件尾移動。若是nBytes是一個負數,文件指針向文件頭移動。
nPosition
指定文件中的位置,指針從該位置移動nBytes。在該參數位置傳遞下列預約義常量之一:
FILE_BIN_CUR:從當前位置開始指針移動nBytes。
FILE_BIN_END:從文件尾開始指針移動nBytes。
FILE_BIN_START:從文件頭開始指針移動nBytes。
返回值:
0:代表函數成功從新定位指針。
< 0:代表函數未能從新定位指針。
9.24 SelectDir
請參閱4.10。
9.25 SetFileInfo
語法:SetFileInfo (szPathFile, nType, nAttribute, szValue);
說明:SetFileInfo函數設置一個現存文件的日期或時間,或修改該文件的屬性。爲修改一個文件的日期和時間,你必須調用SetFileInfo兩次,依次修改日期,一次修改時間。然而你能夠經過在參數nAttribute位置把常量用或操做符(|)組合起來,僅調用SetFileInfo一次而設置文件的多個屬性。
參數:
szPathFile
指定你要修改其日期,時間或屬性的文件的全限定名。
nType
指定要修改的文件特性。在該參數位置傳遞下列預約義常量之一:
FILE_ATTRIBUTE:代表文件的一個或多個屬性將被修改。
FILE_DATE:代表文件的日期將被修改。
FILE_TIME:代表文件的時間將被修改。
nAttribute
當nType 是FILE_ATTRIBUTE時,指定文件屬性(當nType 是 FILE_DATE 或 FILE_TIME時,給該參數傳遞0)。爲指定多個文件屬性,將下列預約義常量用或操做符(|)組合起來:
FILE_ATTR_ARCHIVED:設置存檔屬性。
FILE_ATTR_HIDDEN:設置隱藏屬性。
FILE_ATTR_READONLY:設置只讀屬性。
FILE_ATTR_SYSTEM:設置系統屬性。
FILE_ATTR_NORMAL:當該常量被單獨指定時,全部文件屬性被清除。當該常量和其它文件屬性常量有或操做符組合時,那些不包含在或表達式中的屬性被清除。
szValue
指定下列之一:
當nType是FILE_DATE時,以YYYY/MM/DD 或 YYYY\MM\DD格式指定一個日期。該日期必須不早於"1980/01/01"。當使用反斜槓爲分隔符時,記住一個反斜槓是做爲一個轉義符插入到一個字符串中的,如,"1980\\01\\01"。
當nType是FILE_TIME,以HH:MM:SS格式指定一個時間,使用一個24-hour時鐘格式;注意秒數必須是2的倍數。
當nType是 FILE_ATTRIBUTE時,給該參數傳遞一個空字符串。
返回值:
0:代表函數成功設置文件的日期,時間或屬性。
< 0:代表函數未能設置文件的日期,時間或屬性。
9.26 WriteBytes
語法:WriteBytes (nFile, svString, nIndex, nBytes);
說明:WriteBytes函數寫指定數目的字節到一個以二進制方式打開的文件中。該函數從文件指針當前位置開始寫字節。在調用WriteBytes前,你必須調用OpenFileMode(FILE_MODE_BINARY) 來打開文件,而後調用OpenFile.。
參數nIndex是svString中的下標。使用參數nBytes來指定從參數 nIndex指定處開始多少字節寫到文件中。若是nIndex加上nBytes的值大於svString的長度,InstallShield只將字符串中指定下標開始到字符串結尾的字節數寫到文件中。例如,若是svString聲明爲100個字節長,參數nIndex爲50,參數nBytes爲75,則只有51到100之間的字節(50個字節,而不是75個字節)被被寫到文件中。
參數:
nFile
指定以二進制方式打開的文件的文件句柄。
svString
指定包含要寫到輸出文件中的字節的字符串變量。
nIndex
指定svString中的一個下標;從該位置開始的字節被寫到輸出文件。注意第一個字節是在下標位置0。
nBytes
指定你要寫到輸出文件中的字節數。
返回值:
X:X是實際被寫的字節數。
< 0:代表函數未能寫這些字節。
9.27 WriteLine
語法:WriteLine (nvFileHandle, szLine);
說明:WriteLine函數將一行文本寫到以添加方式打開的文本文件中。在調用WriteLine前,你必須首先用OpenFileMode設置文件方式爲添加方式,而後用CreateFile建立文件,或用OpenFile打開文件。該函數把行放置在文件尾。
WriteLine生成行尾有一個回車和換行符的行。爲寫到一個二進制文件,使用WriteBytes。
該函數不工做於只讀方式打開的文件。
參數:
nvFileHandle
指定一個打開文件的文件句柄。句柄從OpenFile 或 CreateFile中得到。
szLine
指定包含要被寫到文件中的文本的字符串。
"one" and "This":
不要試圖經過在你傳遞到szLine的字符串中嵌入換行符來寫多行。下列代碼將字符串寫爲一行,以一個非打印字符在"one" 和 "This"之間:
szString = "This is line one\nThis is two";
WriteLine(nvFileHandle, szString);
來只調用WriteLine一次而寫兩行 ,你必須插入一個回車和一個換行符(以這樣的次序):
szString = "This is line one\r\nThis is two";
返回值:
0:代表函數將行成功寫到文件中。
< 0:代表函數未能將行寫到文件中。
註解:
·你能夠經過用單引號分隔字符串來在一個字符串中嵌入雙引號。例如,若是你想要寫字符串"This string contains a double "quotation mark." ",你能夠用下列代碼:
WriteLine(nvFileHandle, 'This string contains a double "quotation mark."');
9.28 XCopyFile
語法:XCopyFile (szSrcFile, szTargetPath, nOp);
說明:XcopyFile函數將一個或多個文件從源目錄拷貝到目標目錄。該函數也能夠象拷貝文件同樣拷貝子目錄。當常量INCLUDE_SUBDIR傳遞到參數nOp時,若有必要, XcopyFile在目標目錄上建立子目錄。
你不能用XcopyFile重命名文件。爲在文件拷貝操做中重命名一個文件,使用CopyFile函數。
參數:
szSrcFile
指定要拷貝的文件。若是該文件名是限定的,也就是,若是它包括一個路徑,XCopyFile將從指定位置拷貝文件。若是szSrcFile包含一個未限定文件名,也就是,沒有路徑信息,CopyFile將從由系統變量SRCDIR標識的路徑拷貝。爲拷貝多個文件,在該參數位置使用通配符。
szTargetPath
指定由szSrcFile指定的文件要被拷貝的目錄。若是該參數包含一個空字符串,文件將被拷貝到由系統變量TARGETDIR指定的目錄中。
nOp
指定要執行的拷貝操做類型。在該參數位置傳遞下列預約義常量之一。爲指定多個選項,用或操做符組合常量:
COMP_NORMAL:拷貝文件到目標系統,更新現存的相同名稱的文件,不考慮日期,時間或版本信息。
COMP_UPDATE_SAME:更新文件,即便源文件的日期,時間或版本都和目標文件的相同。你必須和該常量一塊兒也指定COMP_UPDATE_DATE 或 COMP_UPDATE_ VERSION,不然,InstallShield忽略該常量。
COMP_UPDATE_DATE:根據文件日期和時間更新文件。若是源文件比目標文件新時,該常量更新文件。
COMP_UPDATE_VERSION:根據文件版本更新文件。若是源文件比目標文件新時,該常量更新文件。若是源文件和目標文件都不存在文件版本時,日期和時間來做比較。若是僅一個文件不存在文件版本,InstallShield假定包含版本信息的文件是較新的文件。
SELFREGISTER:當使用「非批處理方法「安裝自注冊文件時,當即進行自注冊處理。
當你已經調用Enable(SELFREGISTERBATCH),該選項將自注冊文件排隊等待註冊。當使用「批處理方法「安裝自注冊文件時,一旦調用Do(SELFREGISTRATIONPROCESS),這些文件被登記。老是將SELFREGISTER和常量SHAREDFILE用按位或操做符組合一塊兒使用。
SHAREDFILE:將共享和鎖定文件處理組合起來,經過讓XcopyFile將全部文件處理爲共享並標記鎖定的.dll和.exe文件待Windows或系統重啓後更新。查看RebootDialog 和 SdFinishReboot。SHAREDFILE選項使XcopyFile將全部文件處理爲共享文件,而且當文件存在於目標目錄並有一個大於0的訪問計數器時,註冊表訪問計數器自動遞增一。若是共享文件不存在於目標目錄並無訪問計數器時,InstallShield建立該計數器並設置它爲1。若是共享文件已經存在於目標目錄但沒有訪問計數器時,InstallShield建立該計數器並初始化爲2做爲一個防止卸載過程當中意外刪除的預防措施。
LOCKEDFILE:使XCopyFile標記鎖定的.dll和.exe文件待Windows或系統重啓時更新。一個鎖定文件是一個當InstallShield試圖要訪問或更新時而正在被一個應用程序或系統使用的文件。LOCKEDFILE選項和 SHAREDFILE同樣工做,除了LOCKEDFILE不建立註冊表表目或修改註冊表訪問計數器。你使用SHAREDFILE選項時不能使用LOCKEDFILE選項。有一些非共享文件,對它們腳本做者不要註冊表表目和訪問計數器。這些文件除非由應用程序自己,不然永不被卸載。LOCKEDFILE容許XCopyFile處理非共享的鎖定文件。
EXCLUDE_SUBDIR:指定不包括在源路徑中包含的子目錄。
INCLUDE_SUBDIR:指定源路徑下的子目錄必須也被拷貝。
返回值:
0:代表函數成功拷貝文件。
< 0:代表函數因下列狀況之一未能拷貝文件:
COPY_ERR_CREATEDIR (-27):目標目錄不能被建立。確保系統變量TARGETDIR中的路徑語法正確而且你有權訪問目標驅動器。
COPY_ERR_MEMORY (-6):函數未能分配完成拷貝文件進程所需的內存。儘量多地終止正在運行的應用程序以釋放內存。
COPY_ERR_NODISKSPACE (-38):函數未能在目標驅動器上找到足夠的磁盤空間來拷貝文件。在目標驅動器上釋放磁盤空間。
COPY_ERR_OPENINPUT (-2):函數未能打開系統變量SRCDIR指定的輸入文件。確保源文件有一個有效的文件名而且源文件和目標目錄都存在。
COPY_ERR_OPENOUTPUT (-3):函數未能拷貝所要文件。
COPY_ERR_TARGETREADONLY (-46):TARGETDIR中的文件是隻讀文件。刪除目標文件的只讀屬性並重試。
-51:一個自注冊文件沒有成功註冊。
全部其它負值:代表發生一些其它未肯定錯誤。
註解:
·當使用XcopyFile時,若你使用未限定文件名併爲SRCDIR 和TARGETDIR設置值時,在調用XcopyFile前調用VarSave保存當前值,而後用VarRestore恢復它們。
·由於Windows 95及更高版本不容許一個空文件被拷貝,Windows NT不容許建立空文件,XCopyFile在這些平臺下當被用來拷貝空文件(Size=0KB)時將不工做。
·在用WriteProfString修改.ini文件後, Windows 95及更高版本下,你必須在使用XCopyFile前刷新高速緩存。全部.ini文件在Windows 95及更高版本下被放在高速緩存中;這種特性可能致使延遲將修改寫到指定文件。這接着可能妨礙隨後的文件操做。爲避免這個問題,簡單地以空參數調用WriteProfString來強制Windows 95 及其後版本當即寫數據到.ini文件,以下所示:
WriteProfString ("C:\\Test.ini", "Windows", "KeyboardDelay", "100");
WriteProfString ("","","",""); file://null string ("") for all four parameters
file://XCopyFile should now have access to updated file.
XCopyFile ("C:\\Test.ini", "C:\\Temp", EXCLUDE_SUBDIR);