文件和文件夹函数提供一个全面的方法来处理文本文件,二进制文件和文件夹。许多函数使用变量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);