InstallShield內(nèi)部庫函數(shù)全集八-文件和文件夾函數(shù)(上)
9
文件和文件夾函數(shù)
文件和文件夾函數(shù)提供一個全面的方法來處理文本文件,二進制文件和文件夾。許多函數(shù)使用變量TARGETDIR和SRCDIR作為路徑并只接受文件名作為參數(shù)。適當時也接受通配符。
ChangeDirectory
使指定的目錄為當前目錄。
CloseFile
關(guān)閉一個打開的文件。
CopyFile
將一個文件從一個文件夾拷貝到另一個。
CreateDir
創(chuàng)建一個新文件夾。
CreateFile
創(chuàng)建一個指定文件名的文件。
DeleteDir
刪除一個文件夾。
DeleteFile
刪除一個文件。
ExistsDir
確定指定目錄是否存在。
ExistsDisk
確定指定磁盤是否存在。
FileCompare
將一個文件和另一個比較。
FileDeleteLine
刪除一個文本文件中的一行。
FileGrep
在一個文本文件中查找指定文本。
FileInsertLine
在一個文本文件中插入一行。
FindAllDirs
查找指定文件夾下的所有子文件夾。
FindAllFiles
查找指定文件夾中的所有和一個文件說明匹配的文件和它的子文件夾。
FindFile
查找在指定文件夾中和一個文件說明匹配的第一個文件。
GetFileInfo
檢索一個文件的屬性,日期,時間和大小。
GetLine
從一個打開的文件中檢索一行文本。
OpenFile
打開一現(xiàn)存文件。
OpenFileMode
用OpenFile函數(shù)設(shè)置文件打開的方式。
ReadBytes
從一個二進制文件中讀取指定的字節(jié)數(shù)。
RenameFile
更名一個文件。
SeekBytes
在一個二進制文件中定位文件指針。
SetFileInfo
設(shè)置一個文件的屬性,日期和時間。
WriteBytes
在一個二進制文件的當前文件指針位置寫入指定數(shù)目的字節(jié)。
WriteLine
將一個字符串寫入一個文本文件。
XCopyFile
將一個或多個文件從一個源文件夾拷貝到一個目標文件夾,如果指定則包括子文件夾。
相關(guān)函數(shù)
SelectDir
請參閱4.10。
9.1 ChangeDirectory
語法:ChangeDirectory (szPath);
說明:ChangeDirectory函數(shù)設(shè)置當前目錄。
參數(shù):
szPath
指定要被設(shè)置為當前目錄的目錄名。該名可以是一個全限定路徑名或一個UNC路徑;它必須不包括一個尾隨反斜杠。如有必要,在調(diào)用ChangeDirectory前調(diào)用StrRemoveLastSlash。
返回值:
0:ChangeDirectory成功設(shè)置指定目錄為當前目錄。
< 0:ChangeDirectory未能設(shè)置指定目錄為當前目錄。
注解:
·注意在你調(diào)用ChangeDirectory將一個指定目錄設(shè)為當前目錄后,該目錄不能被刪除。在你可以刪除該目錄前,你必須再次調(diào)用ChangeDirectory來設(shè)置一個不同的當前目錄。
9.2 CloseFile
語法:CloseFile (nvFileHandle);
說明:CloseFile函數(shù)關(guān)閉一個已經(jīng)由調(diào)用OpenFile打開的文件。在你關(guān)閉一個文件后,你不能從中讀或?qū)懙皆撐募?br>參數(shù):
nvFileHandle
指定要關(guān)閉的文件的句柄。
返回值:
0:表明該函數(shù)成功關(guān)閉該文件。
< 0:表明該函數(shù)未能關(guān)閉該文件。
9.3 CopyFile
語法:CopyFile (szSrcFile, szTargetFile);
說明:CopyFile函數(shù)創(chuàng)建一個由參數(shù)szSrcFile指定的文件的拷貝。新文件由參數(shù)szTargetFile指定文件名。
參數(shù):
szSrcFile
指定要拷貝的文件的文件名。如果該文件名是限定的,也就是,如果它包括一個路徑,CopyFile將從指定位置拷貝該文件。如果szSrcFile包含一個未限定文件名,也就是,沒有路徑信息,CopyFile將從由系統(tǒng)變量SRCDIR標識的路徑拷貝。為拷貝一組文件,在該參數(shù)位置使用通配符。
szTargetFile
指定給由szSrcFile標識的文件的拷貝的名稱。如果文件名是限定的,也就是,如果它包含一個路徑,CopyFile將把文件拷貝到路徑指定的位置。如果szSrcFile包含一個未限定文件名,也就是,沒有路徑信息,拷貝將被創(chuàng)建在由系統(tǒng)變量TARGETDIR指定的目錄中。如果目標目錄不存在,它將被創(chuàng)建。
當由szSrcFile指定的文件名中包含一個通配符時,szTargetFile的文件名部分被忽略;每個源文件以它的現(xiàn)存名被拷貝到由szTargetFile指定的路徑。如果szTargetFile包含一個未限定文件名,文件將被拷貝到由系統(tǒng)變量TARGETDIR指定的目錄中。因此,CopyFile不能被用來拷貝和重命名一組文件。當szSrcFile包含一個或多個通配符時,源目錄和目標目錄必須不同。
返回值:
0:表明函數(shù)成功地從源目錄拷貝文件至目標目錄。
< 0:表明函數(shù)因下列情況之一未能拷貝所要文件:
COPY_ERR_CREATEDIR(-27):目標目錄不能被創(chuàng)建。確保系統(tǒng)變量TARGETDIR中的路徑語法正確并且你有權(quán)訪問目標驅(qū)動器。
COPY_ERR_MEMORY(-6):函數(shù)未能分配完成拷貝文件進程所需的內(nèi)存。盡可能多地終止正在運行的應(yīng)用程序以釋放內(nèi)存。
COPY_ERR_NODISKSPACE(-38):函數(shù)未能在目標驅(qū)動器上找到足夠的磁盤空間來拷貝文件。在目標驅(qū)動器上釋放磁盤空間。
COPY_ERR_OPENINPUT(-2):函數(shù)未能打開系統(tǒng)變量SRCDIR指定的輸入文件。確保源文件有一個有效的文件名并且源文件和目標目錄都存在。
COPY_ERR_OPENOUTPUT (-3):函數(shù)未能拷貝所要文件。
COPY_ERR_TARGETREADONLY(-46):TARGETDIR中的文件是只讀文件。刪除目標文件的只讀屬性并重試。
所有其它負值:表明發(fā)生一些其它不確定錯誤。
注解:
·如果你使用未限定文件名并在使用CopyFile時設(shè)置SRCDIR和TARGETDIR的值,在調(diào)用CopyFile前用VarSave保存當前值并然后用VarRestore重新設(shè)置。如果目標目錄不存在,CopyFile創(chuàng)建它。
·你不能通過調(diào)用CopyFile時使用通配符來重命名一組文件。然而,單獨一個文件時你可以使用CopyFile來做到。
·為包括子目錄,調(diào)用XcopyFile函數(shù)。
·對于文件傳輸,XCopyFile是CopyFile的一個完美替換。XCopyFile可以做版本檢測,標記鎖定的.dll和.exe文件待系統(tǒng)重啟后更新,并且遞增共享的.dll和.exe文件的注冊表訪問計數(shù)器。
·因為Windows 95及更高版本不允許一個空文件被拷貝,WindowsNT不允許創(chuàng)建空文件,CopyFile在這些平臺下當被用來拷貝空文件(Size=0KB)時將不工作。
· 在用WriteProfString 或 WriteProfInt修改.ini文件后, Windows95及更高版本下,你必須在使用CopyFile前刷新高速緩存。所有.ini文件在Windows95及更高版本下被放在高速緩存中;這種特性可能導(dǎo)致延遲將修改寫到指定文件。這接著可能妨礙隨后的文件操作。為避免這個問題,簡單地以空參數(shù)調(diào)用WriteProfString來強制Windows95 及更高版本立即寫數(shù)據(jù)到.ini文件,如下所示:
WriteProfString ("C:\\Test.ini", "Windows", "KeyboardDelay","100");
file://null string ("") for all fourparameters
WriteProfString ("", "", "", "");
file://CopyFile should now have access toupdated file.
CopyFile("C:\\Test.ini", "C:\\Temp\\Test.ini");
9.4 CreateDir
語法:CreateDir (szDirPath);
說明:CreateDir函數(shù)在目標驅(qū)動器上創(chuàng)建一個或多個子目錄。你可以使用一個包含多層子目錄的路徑,如C:\Programs\Winapps\Myapp。任何路徑中不存在的子目錄,CreatDir將創(chuàng)建它。例如,如果C:\Programs\Winapps和C:\Programs\Winapps\Myapp都不存在,這些子目錄將都被CreatDir創(chuàng)建。
參數(shù):
szDirPath
指定要創(chuàng)建的子目錄的全限定路徑。將路徑中的每層用一個反斜杠分隔(通過使用反斜杠轉(zhuǎn)義符(\\))。
返回值:
0:表明函數(shù)在目標驅(qū)動器上成功創(chuàng)建指定目錄或指定目錄已經(jīng)存在。
< 0:表明指定目錄不存在并且函數(shù)未能創(chuàng)建指定它。
注解:
下列情況下CreatDir將失?。?br>路徑非法;
驅(qū)動器或路徑上的任何子目錄是寫保護的;
驅(qū)動器名無效;
你沒有網(wǎng)絡(luò)特權(quán)來創(chuàng)建子目錄。
9.5 CreateFile
語法:CreateFile (nvFileHandle, szPath, szFileName);
說明:CreateFile函數(shù)創(chuàng)建一個新文件。如果相同名的文件已經(jīng)存在,CreateFile改寫它。在你用CreateFile創(chuàng)建一個文件前,你必須用OpenFileMode設(shè)置文件方式。
CreateFile將新創(chuàng)建的文件打開為讀/寫(二進制文件)或添加(文本文件)方式,因此你可以使用其它函數(shù),如GetLine,ReadBytes, WriteLine和 WriteBytes.來從文件中讀或?qū)懙轿募小?br> 除了讀/寫或添加方式,所有新創(chuàng)建文件自動打開為OF_SHARE_DENY_NONE方式。這意謂著文件被打開為不拒絕其它程序?qū)λ淖x或?qū)?。這種方式的根段記錄在WindowsOpenFileAPI中。當你結(jié)束從一個文件讀或?qū)λ鼘憰r,你必須使用CloseFile函數(shù)來關(guān)閉該文件。
參數(shù):
nvFileHandle
返回新文件的句柄。
szPath
指定新文件創(chuàng)建所在的子目錄的全限定路徑。
szFileName
指定創(chuàng)建的文件的文件名。
返回值:
0:表明函數(shù)成功創(chuàng)建新文件。
< 0:表明函數(shù)未能創(chuàng)建新文件。
注解:
·CreateFile創(chuàng)建一個新文件并把它打開以便你可以從新文件中讀或?qū)懙叫挛募小閷懙揭粋€現(xiàn)存文件中,你必須首先用OpenFileMode和OpenFile函數(shù)以FILE_MODE_APPEND方式打開文件。
·當操作日志被激活時,CreateFile的函數(shù)操作不存入到卸載記錄中。如果你想要一個由CreatFile創(chuàng)建的文件被存入到卸載記錄中,則當存入功能被激活時,使用XcopyFile傳輸一個啟動程序文件(以你要的文件名)到目標系統(tǒng)。你用Enable和Disable函數(shù)激活和禁用存入功能。當存入功能被激活時,XcopyFile操作被存入,啟動程序文件被存入后,你可以使用CreatFile和其它文件相關(guān)函數(shù)來寫或改寫被存入的啟動程序文件。文件名必須保持不變否則它不會在卸載記錄中找到。
9.6 DeleteDir
語法:DeleteDir(szDir, nFlag);
說明:DeleteDir函數(shù)刪除一個子目錄。根據(jù)你在參數(shù)nFlag使用的值,你可以僅當子目錄為空時刪除它,即使子目錄包含文件也刪除它,或刪除整個根目錄。設(shè)置nFlag需特別謹慎。
參數(shù):
szDir
指定要被刪除的目錄的全限定名。
nFlag
指定刪除選項。在該參數(shù)位置傳遞下列預(yù)定義常量之一:
ALLCONTENTS:刪除szDir指定的目錄,包括其下的所有子目錄和文件。你刪除的目錄必須是一個子目錄,不能是驅(qū)動器上的一個根目錄。
ONLYDIR:僅當szDir指定的目錄為空時才刪除它。否則函數(shù)失敗。
ROOT:即使szDir指定的目錄是根目錄也要刪除它。如果szDir是一個根目錄,DeleteDir將刪除磁盤上一切東西。
返回值:
0:表明函數(shù)成功刪除子目錄。
< 0:表明函數(shù)未能刪除子目錄。
注解:
·你不能刪除當前目錄。
·你不能刪除一個網(wǎng)絡(luò)系統(tǒng)上你沒有適當權(quán)利的文件。
·DeleteDir不能刪除只讀,隱藏或系統(tǒng)文件。
·如果DeleteDir遇到一個只讀文件,該函數(shù)可能在只刪除子目錄中一些文件后失敗。
9.7 DeleteFile
語法:DeleteFile (szFile);
說明:DeleteFile函數(shù)刪除一個或多個文件。注意DeleteFile不能刪除只讀,隱藏或系統(tǒng)文件。如果你試圖刪除一個網(wǎng)絡(luò)系統(tǒng)上你沒有適當文件權(quán)利的文件時,該函數(shù)不起作用。
參數(shù):
szFile
指定要刪除文件的名稱。如果szFile指定一個全限定名,也就是,包括一個路徑,DeleteFile將從指定目錄刪除該文件。如果szFile包含一個未限定文件名,也就是,沒有路徑信息,DeleteFile將從由系統(tǒng)變量TARGETDIR指定的目錄中刪除文件。可以在szFile中包含通配符來刪除多個文件。
返回值:
0:表明函數(shù)成功刪除指定文件。
< 0:表明函數(shù)未能刪除指定文件。
注解:
你在使用FindFile時可以使用通配符來定位文件然后用DeleteFile刪除它們。
9.8 ExistsDir
語法:ExistsDir (szPath);
說明:ExistsDir函數(shù)在目標系統(tǒng)上檢測指定目錄的存在性。
參數(shù):
szPath
指定要在目標系統(tǒng)上找到的目錄的全限定路徑。
返回值:
EXISTS (0):表明指定目錄存在于目標系統(tǒng)上。
NOTEXISTS (-1):表明指定目錄不存在于目標系統(tǒng)上。
9.9 ExistsDisk
語法:ExistsDisk (szDisk);
說明:ExistsDisk函數(shù)在目標系統(tǒng)上檢測指定磁盤驅(qū)動器的存在性。
參數(shù):
szDisk
指定磁盤驅(qū)動器字符。
返回值:
EXISTS (0):表明目標系統(tǒng)上存在指定驅(qū)動器。
NOTEXISTS (-1):表明目標系統(tǒng)上不存在指定驅(qū)動器。
9.10 FileCompare
語法:FileCompare (szFileName1, szFileName2, nCompareFlag);
說明:FileCompare函數(shù)比較兩個文件的大小,日期或版本。
參數(shù):
szFileName1
指定要比較的第一個文件的全限定名。
szFileName2
指定要比較的第二個文件的全限定名。
nCompareFlag
指定比較選項。在該參數(shù)位置傳遞下列預(yù)定義常量之一:
COMPARE_SIZE:比較兩個文件的大小。
COMPARE_DATE:比較兩個文件的日期。
COMPARE_VERSION:比較兩個文件的版本資源。
返回值:
EQUALS (2):第一個文件的日期,大小或版本和第二個的相等。
FILE_NOT_FOUND (-2):函數(shù)未能找到一個文件或都未能找到。
GREATER_THAN(0):第一個文件比第二個文件更新或更大,根據(jù)在參數(shù)nCompareFlag使用的常量:
.COMPARE_VERSION
文件一比文件二新。
.COMPARE_DATE
文件一比文件二日期后。
.COMPARE_SIZE
文件一比文件二大。
.LESS_THAN (1)
文件一比文件二舊或小。
OTHER_FAILURE (-1)
發(fā)生不確定錯誤。
9.11 FileDeleteLine
語法:FileDeleteLine (szFileName, nStartLineNum,nEndLineNum);
說明:FileDeleteLine函數(shù)從一個文本文件中使用一個起始行和結(jié)束行行號來刪除該區(qū)域的行(包括起始行和結(jié)束行)。該函數(shù)作用于面向行的文本文件;它不作用于二進制文件。你可以使用FileDeleteLine和FileGrep函數(shù)來查找和刪除一個文件中的文本行。
由szFileName指定的文件必須尚未通過調(diào)用OpenFile被打開。如果szFileName已經(jīng)被打開,在調(diào)用FileDeleteLine前調(diào)用CloseFile。
參數(shù):
szFileName
指定文件的全限定名,它位于系統(tǒng)變量SRCDIR指定的目錄中。如果該文件存在,由nStartLineNum和nEndLineNum指定的行將從該文件中刪除。
nStartLineNum
指定要從文件中刪除的第一行的行號。注意行從0開始編號。
nEndLineNum
指定要從文件中刪除的最后一行的行號。注意行從0開始編號。為了從nStartLineNum指定的行開始刪除到文件結(jié)尾,給該參數(shù)傳遞預(yù)定義常量DELETE_EOF。
返回值:
0:FileDeleteLine從該文件成功刪除指定行。
< 0:FileDeleteLine因為下列情況之一而失?。?br>FILE_NOT_FOUND(-2):InstallShield未能找到szFileName指定的文件。
FILE_RD_ONLY (-5):文件是寫保護的。
LINE_NUMBER(-7):一個你所指定的行號小于0,或者文件中沒有該行號。
OUT_OF_DISK_SPACE(-6):沒有足夠的磁盤驅(qū)動器空間來完成指定操作。
OTHER_FAILURE (-1):發(fā)生其它一些不確定錯誤。
9.12 FileGrep
語法:FileGrep (szFileName, szSearchStr, svReturnLine,nvLineNumber, nFlag);
說明:FileGrep函數(shù)在一個文本文件中查找一個指定字符串。如果字符串被找到,包含該字符串的行被返回到參數(shù)svReturnLine,該行的行號被返回到參數(shù)nvLineNumber。查找不區(qū)分大小寫。FileGrep作用于面向行的文本文件;它不作用于二進制文件。
在用FileGrep查找一個文件之前沒有必要打開它;你也無須在調(diào)用FileGrep之后關(guān)閉它。文件打開和文件關(guān)閉由FileGrep自動執(zhí)行。雖然多數(shù)情況下,F(xiàn)ileGrep對一個已經(jīng)被打開的文件(先前調(diào)用OpenFile的結(jié)果)將成功執(zhí)行,但如果文件是以添加方式打開時,F(xiàn)ileGrep將返回FILE_NOT_FOUND。
參數(shù):
szFileName
指定要查找的文件的全限定名。
szSearchStr
指定查找字符串。
svReturnLine
返回szSearchStr被找到的行。
nvLineNumber
返回szSearchStr被找到的行的行號。行以0開始編號。
nFlag
指定查找選項。在該參數(shù)位置傳遞下列預(yù)定義常量之一:
CONTINUE:檢索查找字符串的下一個出現(xiàn)(如果有)。
RESTART:檢索查找字符串的第一次出現(xiàn)。
返回值:
0:FileGrep找到指定字符串。
< 0:FileGrep因下列情況之一而失?。?br>END_OF_FILE (-4):沒有找到查找字符串而已到文件尾。
FILE_NOT_FOUND(-2):InstallShield未能找到szFileName指定的文件。
FILE_LINE_LENGTH (-3):行超過允許的最大長度。
OTHER_FAILURE (-1):發(fā)生一個不確定錯誤。
9.13 FileInsertLine
語法:FileInsertLine (szFileName, szInsertLine, nLineNumber,nInsertFlag);
說明:FileInsertLine函數(shù)通過指定行號來插入或置換一行。你可以將FileInsertLine和 FileGrep一起使用,F(xiàn)ileGrep找到行并返回它們的行號。
FileInsertLine工作于面向行的且每行不超過1,024字節(jié)的文本文件。InstallShield假定任何長于最大允許長度的行表明了這是一個二進制文件而導(dǎo)致FileInsertLine失敗。
由szFileName指定的文件必須尚未通過調(diào)用OpenFile被打開。如果szFileName已經(jīng)被打開,在調(diào)用FileInsertLine前調(diào)用CloseFile。
參數(shù):
szFileName
指定文件的全限定名,它位于系統(tǒng)變量SRCDIR指定的目錄中。如果該文件存在,則將szInsertLine的值插入其中。
szInsertLine
指定插入到文件中的字符串。
nLineNumber
指定你要將szInsertLine插入到的行號。第一行行號是0。
nInsertFlag
指定一個插入位置選項。在該參數(shù)位置傳遞下列預(yù)定義常量之一:
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):表明沒有足夠的磁盤驅(qū)動器空間來完成指定操作。
OTHER_FAILURE (-1):發(fā)生一個不確定錯誤。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報。