ASP教程-文件操作类
使用“二进制文件操作类编写的[文件分割]和[文件合并]代码例子:
<%
Dim obj
Set obj=New FileClass
'文件分隔
Dim i
Obj.OpenFile "G:/2.mp3",""
i=0
Do While Not Obj.Eof
If Obj.NewFile("G:/2_"&i&".mp3",Obj.Read(2048*1024)) Then '分隔成2M大小的文件
Response.Write "分隔成文件G:/2_"&i&".mp3成功!<br>"
Else
Response.Write "分隔成文件G:/2_"&i&".mp3失败!<br>"
End If
i=i+1
Loop
Obj.CloseFile
'合并文件
Dim j
Obj.AppendFile "G:/2_0.mp3","G:/2_1.mp3","G:/Mp3.mp3"
For j=2 To i-1
Obj.AppendFile "G:/Mp3.mp3","G:/2_"&j&".mp3",""
Next
Response.Write "合并文件成功!"
Set Obj=Nothing
%>
类的代码:
<%
'/*******************************二进制文件操作类************************************
'/*用法:
'/*Dim obj,sData,iPos,iSize
'/*Set obj=new FileClass
'/*obj.OpenFile "文件绝对路径地址","打开方式" '打开文件,打开方式的值和ADODB.Stream的'/*Mode属性值相同,打开方式的相关几个值:1 = 只读 2 = 只写 3或空值 = 读写
'/*obj.AppendTo "[追加文件]绝对路径地址" '把当前打开的文件追加到[追加文件]的末尾
'/*obj.Move 数值 '把当前打开的文件指针相对移动[数值]个字节
'/*obj.MoveTo 数值 '把当前打开的文件指针绝对于文件头移动[数值]个字节
'/*sData=obj.Read(数值)
'/*'说明:obj.Read(数值)读取当前被打开的文件[数值]个字节
'/*注意:读取位置与文件指针有关,如果数值为0则从当前文件位置开始读取数据直到文件尾
'/*sData=obj.ReadAll '读取当前打开的文件所有数据
'/*iPos=obj.Position '返回当前文件的文件指针位置(Position属性是只读,不能写)
'/*iSize=obj.Size '返回当前文件的大小,即字节总数
'/*If obj.Eof Then Response.Write "文件尾"
'/*注意:obj.Eof是判断文件指针是否移动到了文件的末尾,当obj.Eof=True时
'/* obj.Position=obj.Size。但obj.Position=obj.Size则不一定obj.Eof=True
'/*obj.SaveAs "另存为文件名","保存模式" '将当前打开的文件另存为新文件,保存模式的值是1或2 1=非覆盖 2=覆盖
'/*obj.CloseFile '关闭当前打开的文件
'/*obj.NewFile "新文件名",字节数据流 '将[字节数据流]建立一个新文件,如果文件存在则将覆盖,如果非字节数据流则新建文件失败
'/*obj.AppendFile "文件1","文件2",“生成文件"
'/*'将[文件1]和[文件2]合并为一个新的[生成文件],如果[生成文件]存在,则合并失败!如果将[生成文件]置为空,则将[文件2]合并进[文件1去。
'/*Response.Write obj.GetText(字节数据流) '将[字节数据流]转换成字符串并返回
'/*Set obj=Nothing
'/*
'/*说明:字节数据流是二进制的数据
'/*以下方法可以不需要先OpenFile:NewFile和AppendFile和GetText方法,否则其它则必需要先使用OpenFile方法打开文件
'/**********************************************************************************
Class FileClass
Private ObjStream 'ADODB.Stream对象变量
Private OpenFlag '是否已有打开的文件
Private FileIsEof
'/**********************************************************************************
'/* 函数名:初始化类
'/**********************************************************************************
Private Sub Class_Initialize
OpenFlag=False
FileIsEof=True
End Sub
'/**********************************************************************************
'/* 函数名:
'/**********************************************************************************
Private Sub Class_Terminate
Call CloseFile
Set ObjStream=Nothing
End Sub
'/**********************************************************************************
'/* 函数名:获取文件的大小(-1 = 没有打开的文件)
'/**********************************************************************************
Public Property Get Size
If OpenFlag Then
Size=ObjStream.Size
Else
Size=-1
End If
End Property
'/**********************************************************************************
'/* 函数名:获取当前文件的文件指针位置(-1 = 没有打开的文件)
'/**********************************************************************************
Public Property Get Position
If OpenFlag Then
Position=ObjStream.Position
Else
Position=-1
End If
End Property
'/**********************************************************************************
'/* 函数名:获取当前的文件是否在文件尾(True = 文件尾 False = 否)
'/*注意:返回为True时文件只是在最后一个字节处,返回为True是因为被尝试移动指针到文件的尾部(大于文件的大小)
'/* 如果外部调用此值时建议当该值为True时,停止任何的读取数据操作,否则有可能会有数据返回
'/**********************************************************************************
Public Property Get Eof
Eof=FileIsEof
End Property
'/**********************************************************************************
'/* 函数名:打开文件
'/*参数: FileName = 要打开的文件名,绝对地址
'/* OpenMode = 打开文件的模式 值是同Adodb.RecordSet 对象的Mode属性相同
'/**********************************************************************************
Public Function OpenFile(ByVal FileName,ByVal OpenMode)
On Error Resume Next
Dim sFileName,iMode
If OpenFlag Then '如果已有打开文件,则关闭前一个文件
Call CloseFile
End If
sFileName=Trim(FileName)
If sFileName="" Then
FileIsEof=True
OpenFlag=False
OpenFile=False
Exit Function
End If
iMode=Cint(OpenMode) '如果输入的不是数字则采用默认的3打开模式(读写型)
If Err.Number<>0 Then
iMode=3
Err.Clear
End If
If iMode<>0 And iMode<>1 And iMode<>2 And iMode<>3 And iMode<>4 And iMode<>8 And iMode<>12 And iMode<>16 And iMode<>4194304 Then
iMode=3 '如果输入的数字不在ADODB.ReadStream的Mode属性所接受的值则采用默认值3
End If
'On Error Goto 0
If Not InitObjStream Then '初始化对象,如不能初始化则返回一个False值
FileIsEof=True
OpenFlag=False
OpenFile=False
Exit Function
End If
ObjStream.Type=1
ObjStream.Mode=iMode
ObjStream.Open
ObjStream.LoadFromFile sFileName
If Err.Number<>0 Then
Err.Clear
Exit Function
End If
FileIsEof=False
OpenFlag=True
OpenFile=True
End Function
'/**********************************************************************************
'/* 函数名:读取指定长度的二进制内容
'/*参数: Numbytes = 要读取的字节数(Numbytes = 0 获取当前文件指针后的所有内容)
'/*返回:读取的字节数据
'/**********************************************************************************
Public Function Read(ByVal Numbytes)
Dim iNum
If Not OpenFlag Then Exit Function
If Not IsInteger(Numbytes) Then Exit Function
iNum=Clng(Numbytes)
FileIsEof=False
If iNum<0 Then
Exit Function
ElseIf (iNum+ObjStream.Position)>ObjStream.Size Then
'iNum=ObjStream.Size-ObjStream.Position
FileIsEof=True
End If
If iNum=0 Then
Read=ObjStream.Read
Else
Read=ObjStream.Read(iNum)
End If
End Function
'/**********************************************************************************
'/* 函数名:读取文件的所有内容
'/*参数:
'/*返回:读取文件的所有字节数据
'/**********************************************************************************
Public Function ReadAll
If Not OpenFlag Then Exit Function
ObjStream.Position=0
ReadAll=ObjStream.Read
FileIsEof=True
End Function
'/**********************************************************************************
'/* 函数名:文件另存为
'/*参数:FileName = 另存为文件绝对路径 Options = 文件另存为的模式 (1=非覆盖 2=覆盖)
'/*返回:读取文件的所有字节数据
'/**********************************************************************************
Public Function SaveAs(ByVal FileName,ByVal Options)
On Error Resume Next
Dim sFileName,iOption
If Not OpenFlag Then
SaveAs=False
Exit Function
End If
sFileName=Trim(FileName)
If sFileName="" Then
SaveAs=False
Exit Function
End If
iOption=Cint(Options)
If Err.Number<>0 Then '如果非数值型数据,则采用默认值 1 = 非覆盖方式保存
iOption=1
Err.Clear
End If
If iOption<>1 And iOption<>2 Then '如果Options的值不在1和2的范围,则采用默认值 1
iOption=1
End If
ObjStream.SaveToFile sFileName,iOption
If Err.Number<>0 Then
Err.Clear
SaveAs=False
Exit Function
End If
SaveAs=True
End Function
'/**********************************************************************************
'/* 函数名:追加文件数据到另一个文件
'/*参数:FileName = 被追加的文件绝对路径
'/*返回:True = 追加数据成功 False = 追加文件数据失败
'/**********************************************************************************
Public Function AppendTo(ByVal FileName)
On Error Resume Next
Dim sFileName,AppendObj
If Not OpenFlag Then
AppendTo=False
Exit Function
End If
sFileName=Trim(FileName)
If sFileName="" Then
AppendTo=False
Exit Function
End If
'打开要被追加的文件
Set AppendObj=Server.CreateObject("ADODB.Stream")
AppendObj.Type=1
AppendObj.Mode=3
AppendObj.Open
AppendObj.LoadFromFile sFileName
If Err.Number<>0 Then
Err.Clear
AppendTo=False
Exit Function
End If
AppendObj.Position=AppendObj.Size '移动指针到文件尾
AppendObj.Write ReadAll '追加数据第一个文件的数据
AppendObj.SaveToFile sFileName,2 '另存为自己
If Err.Number<>0 Then
Err.Clear
AppendTo=False
Exit Function
End If
AppendObj.Close
Set AppendObj=Nothing
AppendTo=True
End Function
'/**********************************************************************************
'/* 函数名:保存sData数据为一个文件
'/*参数:FileName = 被追加的文件绝对路径
'/*返回:True = 追加数据成功 False = 追加文件数据失败
'/**********************************************************************************
Public Function NewFile(ByVal FileName,ByRef sData)
On Error Resume Next
Dim sFileName,AppendObj
sFileName=Trim(FileName)
If sFileName="" Then
NewFile=False
Exit Function
End If
'打开要被追加的文件
Set AppendObj=Server.CreateObject("ADODB.Stream")
AppendObj.Type=1
AppendObj.Mode=3
AppendObj.Open
If Err.Number<>0 Then
Err.Clear
NewFile=False
Exit Function
End If
If Left(TypeName(sData),4)="Byte" Then '是字节流数据才能追加
AppendObj.Write sData '追加数据第一个文件的数据
AppendObj.SaveToFile sFileName,2 '另存为自己
Else
NewFile=False
Exit Function
End If
If Err.Number<>0 Then
Err.Clear
NewFile=False
Exit Function
End If
AppendObj.Close
Set AppendObj=Nothing
NewFile=True
End Function
'/**********************************************************************************
'/* 函数名:文件合并
'/*参数:AppendFileName = 合并文件1 SourceFileName = 合并文件2 TargetFileName = 合并后的文件(如为空,则保存为第一个文件名)
'/*返回:True = 合并成功 False = 合并失败
'/**********************************************************************************
Public Function AppendFile(ByVal AppendFileName,ByVal SourceFileName,ByVal TargetFileName)
On Error Resume Next
Dim sFileName1,sFileName2,AppendObj1,AppendObj2
Dim sTargetFile
sFileName1=Trim(AppendFileName)
sFileName2=Trim(SourceFileName)
sTargetFile=Trim(TargetFileName)
If sFileName1="" Or sFileName2="" Then
AppendFile=False
Exit Function
End If
'打开要被追加和追加的文件
Set AppendObj1=Server.CreateObject("ADODB.Stream")
Set AppendObj2=Server.CreateObject("ADODB.Stream")
AppendObj1.Type=1
AppendObj1.Mode=3
AppendObj1.Open
AppendObj1.LoadFromFile sFileName1
AppendObj2.Type=1
AppendObj2.Mode=3
AppendObj2.Open
AppendObj2.LoadFromFile sFileName2
If Err.Number<>0 Then
Err.Clear
AppendFile=False
Exit Function
End If
AppendObj1.Position=AppendObj1.Size '移动指针到文件尾
AppendObj1.Write AppendObj2.Read '追加数据第一个文件的数据
If sTargetFile="" Then
AppendObj1.SaveToFile sFileName1,2 '另存为自己
Else
AppendObj1.SaveToFile sTargetFile,1 '另存为其它文件时不采用强制覆盖方式
End If
If Err.Number<>0 Then
Err.Clear
AppendFile=False
Exit Function
End If
AppendObj1.Close
Set AppendObj1=Nothing
AppendObj2.Close
Set AppendObj2=Nothing
AppendFile=True
End Function
'/**********************************************************************************
'/* 函数名:移动文件指针(相对移动)
'/*参数: ToNum = 要移动的字节数
'/*
'/**********************************************************************************
Public Sub Move(ByVal ToNum)
Dim iNum
If Not OpenFlag Then Exit Sub
If Not IsInteger(ToNum) Then Exit Sub
iNum=ObjStream.Position+Clng(ToNum)
FileIsEof=False
If iNum<0 Then
iNum=0
ElseIf iNum>ObjStream.Size Then
iNum=ObjStream.Size
FileIsEof=True
End If
ObjStream.Position=iNum
End Sub
'/**********************************************************************************
'/* 函数名:移动文件指针(绝对移动)
'/*参数: ToNum = 要移动的字节数
'/*
'/**********************************************************************************
Public Sub MoveTo(ByVal ToNum)
Dim iNum
If Not OpenFlag Then Exit Sub
If Not IsInteger(ToNum) Then Exit Sub
iNum=Clng(ToNum)
FileIsEof=False
If iNum<0 Then
iNum=0
ElseIf iNum>ObjStream.Size Then
iNum=ObjStream.Size
FileIsEof=True
End If
ObjStream.Position=iNum
End Sub
'/**********************************************************************************
'/* 函数名:关闭已打开的文件
'/**********************************************************************************
Public Sub CloseFile
On Error Resume Next
If Not IsNothing(ObjStream) Then
ObjStream.Close
End If
OpenFlag=False
FileIsEof=True
End Sub
'/**********************************************************************************
'/* 函数名:初始化ObjStream对象
'/**********************************************************************************
Private Function InitObjStream
On Error Resume Next
If IsNothing(ObjStream) Then
Set ObjStream=Server.CreateObject("ADODB.Stream")
If Err.Number<>0 Then
Err.Clear
InitObjStream=False
Exit Function
End If
End If
InitObjStream=True
End Function
'/**********************************************************************************
'/* 函数名:获取二进制转换为字符串的数据
'/**********************************************************************************
Public Function GetText(ByRef vIn)
On Error Resume Next
Dim strReturn, i, ThisCharCode, NextCharCode
strReturn = ""
For i = 1 To LenB(vIn)
ThisCharCode = AscB(MidB(vIn, i, 1))
If ThisCharCode < &H80 Then
strReturn = strReturn & Chr(ThisCharCode)
Else
NextCharCode = AscB(MidB(vIn, i + 1, 1))
strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))
i = i + 1
End If
Next
GetText = strReturn
End Function
'/**********************************************************************************
'/* 函数名:判断OBJ对象是否是空值
'/**********************************************************************************
Private Function IsNothing(Obj)
If Not IsObject(Obj) Then
IsNothing=True
Exit Function
End If
If Obj Is Nothing Then
IsNothing=True
Exit Function
End If
If IsNull(Obj) Then
IsNothing=True
Exit Function
End If
IsNothing=False
End Function
'/**********************************************************************************
'/* 函数名:判断是否是数字值(0,1,2,3,4,5...........9)
'/**********************************************************************************
Private Function IsInteger(Para)
On Error Resume Next
Dim str
Dim l,i
If isNUll(para) Then
IsInteger=False
Exit Function
End if
str=Cstr(para)
If Trim(str)="" Then
IsInteger=False
Exit Function
End If
l=Len(str)
For i=1 To l
If Mid(str,i,1)>"9" Or Mid(str,i,1)<"0" Then
IsInteger=False
Exit Function
End if
Next
IsInteger=true
If Err.number<>0 Then Err.clear
End Function
End Class
%>
'-----------------------文件移动函数----
Function FileMove(strFileSource,strFileDestination)
IF strFileSource = "" or isnull(strFileSource) Then
Response.Write("原文件路径不能为空!")
Response.End
End IF
IF strFileDestination = "" or isnull(strFileDestination) Then
Response.Write("目的路径不能为空")
Response.End
End IF
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists(strFileSource) Then
fso.MoveFile strFileSource, strFileDestination
FileMove="Y"
Else
Response.Write("该文件不存在!")
Response.End
End If
Set fso = Nothing
End Function
问题二:用Replace函数替换
str="/doc/filepath/"
new_str=Replace(str,"filepath","替换成另外的字符")
ASP文件操作函数详解
文件操作函数中,可分为三种类型,就是:1、文件名函数,2、文件管理函数;3、文件I/O函数。
1、文件名函数
文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。下表列出这些函数及其功能。
函数 说明
ExpandFileName() 返回文件的全路径(含驱动器、路径)
ExtractFileExt() 从文件名中抽取扩展名
ExtractFileName() 从文件名中抽取不含路径的文件名
ExtractFilePath() 从文件名中抽取路径名
ExtractFileDir() 从文件名中抽取目录名
ExtractFileDrive() 从文件名中抽取驱动器名
ChangeFileExt() 改变文件的扩展名
ExpandUNCFileName() 返回含有网络驱动器的文件全路径
ExtractRelativePath() 从文件名中抽取相对路径信息
ExtractShortPathName() 把文件名转化为DOS的8·3格式
MatchesMask() 检查文件是否与指定的文件名格式匹配
下面就把这些函数作一一介绍:
⑴ExpandFileName()
原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName);
功能:返回文件的全路径(含驱动器、路径)
参数:FileName:要处理的文件名
例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:/MyBCB/Sample1.EXE
⑵ExtractFileExt()
原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName);
功能:从文件名中抽取扩展名
参数:FileName:要处理的文件名(全路径)
例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe"
⑶ExtractFileName()
原型:extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName);
功能:从文件名中抽取不含路径的文件名
参数:FileName:要处理的文件名
例:ShowMessage(ExtractFileExt("c://Winnt//SOL.EXE"));//显示"SOL.EXE"
⑷ExtractFilePath()
原型:extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);
功能:从文件名中抽取路径名
参数:FileName:要处理的文件名
例:ShowMessage(ExtractFilePath("Winnt//SOL.EXE"));//显示"Winnt/"
⑸ExtractFileDir()
原型:extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);
功能:从文件名中抽取目录名(和上个函数不同,不包括最后的"/")
参数:FileName:要处理的文件名
例:ShowMessage(ExtractFileDir("Winnt//SOL.EXE"));//显示"Winnt",注意和上个函数的区别
⑹ExtractFileDrive()
原型:extern PACKAGE AnsiString __fastcall ExtractFileDrive(const AnsiString FileName);
功能:从文件名中抽取驱动器名
参数:FileName:要处理的文件名
例:ShowMessage(ExtractFileDrive("c://Winnt//SOL.EXE"));//显示"c:"
⑺ChangeFileExt()
原型:extern PACKAGE System::AnsiString __fastcall ChangeFileExt(const System::AnsiString FileName, const System::AnsiString Extension);
功能:更改文件名的扩展名,不是对真正的文件进行改名,只是对文件名这个字符串进行处理
参数:FileName:要改名的文件名,Extension:新的扩展名
例:ShowMessage(ChangeFileExt("c://Winnt//SOL.EXE",".OOO"));//显示"c:/winnt/SOL.OOO"
⑻ExpandUNCFileName()
原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName);
功能:返回含有网络驱动器的文件全路径,格式为://机器名/共享名/文件名
参数:FileName:要处理的文件名
例:ShowMessage(ExpandUNCFileName("F://Winnt//SOL.EXE"));/*如果F:是映射的网络驱动器//NT40/WINNT,则显示"//NT40/WINNT/SOL.EXE"*/
⑼ExtractRelativePath()
原型:extern PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BaseName, const AnsiString DestName);
功能:从文件名中抽取相对路径信息,如"../sss/ss.asd"这种形式
参数:BaseName:基准文件名;DestName:目标文件名
例:ShowMessage(ExtractRelativePath("D://Source//c//1.123","D://Source//Asm//dz.asm"));/*显示"../asm/dz.asm"*/
⑽ExtractShortPathName()
原型:extern PACKAGE AnsiString __fastcall ExtractShortPathName(const AnsiString FileName);
功能:把文件名转换为DOS的8、3格式
参数:FileName:要处理的文件名
例:ShowMessage(ExtractShortPathName("E://Program Files//Dual Wheel Mouse//4dmain.exe"));/*显示"E:/Progra~1/dualwh~1/4dmain.exe"*/
⑾MatchesMask()
原型:extern PACKAGE bool __fastcall MatchesMask(const AnsiString Filename, const AnsiString Mask);
功能:检查文件是否与指定的文件名格式匹配
参数:FileName:要处理的文件名;Mask:文件名格式,支持通配符
例:ShowMessage(MatchesMask("Lxf.exe","*.?x?));//显示"true"
2、文件管理函数
这类函数包括设置和读取驱动器、子目录和文件的有关的各种操作,下表列出这类操作常用的函数及其功能。
函数 功能
CreateDir() 创建新的子目录
DeleteFile() 删除文件
DirectoryExists() 判断目录是否存在
DiskFree() 获取磁盘剩余空间
DiskSize() 获取磁盘容量
FileExists() 判断文件是否存在
FileGetAttr() 获取文件属性
FileGetDate() 获取文件日期
GetCurrentDir() 获取当前目录
RemoveDir() 删除目录
SetCurrentDir() 设置当前目录
下面就把这些函数作一一介绍:
⑴CreateDir()
原型:extern PACKAGE bool __fastcall CreateDir(const System::AnsiString Dir);
功能:建立子目录,如果成功返回true,否则返回false
参数:Dir:要建立的子目录的名字
例:Create("ASM");//在当前目录下建立一个名为ASM的子目录
⑵DeleteFile()
原型:extern PACKAGE bool __fastcall DeleteFile(const System::AnsiString FileName);
功能:删除文件,如果成功返回true,否则返回false
参数:FileName:要删除的文件名
例:if(OpenDialog1->Execute())DeleteFile(OpenDialog1->FileName);
⑶DirectoryExists()
原型:extern PACKAGE bool __fastcall DirectoryExists(const System:: AnsiString Name);
功能:检测目录是否存在,如果存在返回true,否则返回false
参数:Name:要检测的目录名
例:if(!DirectoryExists("ASM"))CreateDir("ASM");//如果ASM这个目录不存在则创建之
⑷DiskFree()
原型:extern PACKAGE __int64 __fastcall DiskFree(Byte Drive);
功能:检测磁盘剩余空间,返回值以字节为单位,如果指定的磁盘无效,返回-1
参数:Drive:磁盘的代号,0表示当前盘, 1=A,2=B,3=C 以此类推
例:ShowMessage(DiskFree(0));//显示当前盘的剩余空间
⑸DiskSize()
原型:extern PACKAGE __int64 __fastcall DiskSize(Byte Drive);
功能:检测磁盘容量,返回值以字节为单位,如果指定的磁盘无效,返回-1
参数:Drive:磁盘的代号,0表示当前盘, 1=A,2=B,3=C 以此类推
例:ShowMessage(DiskFree(0));//显示当前盘的容量
⑹FileExists()
原型:extern PACKAGE bool __fastcall FileExists(const AnsiString FileName);
功能:检测文件是否存在,如果存在返回true,否则返回false
参数:FileName:要检测的文件名
例:if(FileExists("AAA.ASM"))DeleteFile("AAA.ASM");
⑺FileGetAttr()
原型:extern PACKAGE int __fastcall FileGetAttr(const AnsiString FileName);
功能:取得文件属性,如果出错返回-1
返回值如下表,如果返回$00000006表示是一个具有隐含和系统属性的文件(4+2)
常量 值 含义
faReadOnly $00000001 只读文件
faHidden $00000002 隐含文件
faSysFile $00000004 系统文件
faVolumeID $00000008 卷标
faDirectory $00000010 目录
faArchive $00000020 归档文件
例:if(FileGetAttr("LLL.TXT")&0x2)ShowMessage("这是一个有隐含属性的文件");
与此对应的有FileSetAttr() ,请自已查阅帮助系统
⑻FileGetDate()
原型:extern PACKAGE int __fastcall FileGetDate(int Handle);
功能:返回文件的建立时间到1970-1-1日0时的秒数
参数:Handle:用FileOpen()打开的文件句柄。
例:
int i=FileOpen("C://autoexec.bat",fmOpenRead);
ShowMessage(FileGetDate(i));
FileClose(i);
与此对应的有FileSetDate(),请自已查阅帮助系统
⑼GetCurrentDir()
原型:extern PACKAGE AnsiString __fastcall GetCurrentDir();
功能:取得当前的目录名
例:ShowMessage(GetCurrentDir());
⑽RemoveDir()
原型:extern PACKAGE bool __fastcall RemoveDir(const AnsiString Dir);
功能:删除目录,如果成功返回true,否则返回false
参数:Dir:要删除的目录名
例:if(DiectoryExists("ASM"))RemoveDir("ASM");
⑾SetCurrentDir()
原型:extern PACKAGE bool __fastcall SetCurrentDir(const AnsiString Dir);
功能:设置当前目录,如果成功返回true,否则返回false
参数:Dir:要切换到的目录名
例:SetCurrentDir("C://WINDOWS");
3、文件I/O函数
这类函数完成对文件的读写相关的操作,这种类型的操作和C的基于I/O文件操作类似,下表列出这类操作常用的函数及其功能。
FileOpen() 打开文件
FileClose() 关闭文件
FileRead() 读文件
FileSeek() 文件定位
FileWrite() 写文件
FileCreate() 创建文件
下面就对这些函数作详细介绍。
⑴FileOpen()
原型:extern PACKAGE int __fastcall FileOpen(const AnsiString FileName, int Mode);
功能:打开文件,如果成功返回其句柄,否则返回-1
参数:FileName:要打开的文件名;Mode:打开的方式,取值如下表,可用"或"("|")运算符连接。
常量 值 说明
-------------------------------------------------------------
fmOpenRead 0 以只读属性打开
fmOpenWrite 1 以只写属性打开
fmOpenReadWrite 2 以读/写属性打开
fmShareCompat 0 兼容FCB方式(汇编中有相应的DOS功能调用,感兴趣自已查阅相关资料)
fmShareExclusive 16 共享方式:以独占方式打开,在关闭以前,别人不能访问
fmShareDenyWrite 32 共享方式:拒绝写访问
fmShareDenyRead 48 共享方式:拒绝读访问
fmShareDenyNone 64 共享方式:无限制,允许读写
例:int i=FileOpen("C://WINDOWS//Win.ini",fmOpenReadWrite|fmShareExclusive);
⑵FileClose()
原型:extern PACKAGE void __fastcall FileClose(int Handle);
功能:关闭打开的句柄。
参数:Handle:要关闭的句柄
例:FileClose(i);
⑶FileRead()
原型:extern PACKAGE int __fastcall FileRead(int Handle, void *Buffer, int Count);
功能:读文件,返回实际读取的字节数,句柄必须首先由FileOpen或FileCreate创建。
参数:Handle:要读取的句柄;Buffer:存放读取的数据的缓冲区;Count:想读取的字节数
例:char str[400];FileRead(hnd1,str,400);
⑷FileSeek()
原型:extern PACKAGE int __fastcall FileSeek(int Handle, int Offset, int Origin);
功能:移动文件读取指针,成功返回文件指针的位置,失败返回-1
参数:Handle:相关联的句柄;Offset:移动的量;Orgin:移动的基准,0=文件头,1=当前位置,2=文件尾。
例:ShowMessage(FileSeek(hnd1,0,2));//取得文件的长度
⑸FileWrite()
原型:extern PACKAGE int __fastcall FileWrite(int Handle, const void *Buffer, int Count);
功能:写文件,返回实际写入的字节数,句柄必须首先由FileOpen或FileCreate创建。
参数:Handle:要写入的句柄;Buffer:存放写入数据的缓冲区;Count:想写入的字节数
例:char str[]="I Love You";FileWrite(hnd1,str,strlen(str));
⑹FileCreate()
原型:extern PACKAGE int __fastcall FileCreate(const AnsiString FileName);
功能:创建文件。成功返回其句柄,否则返回-1
参数:FileName:要创建的文件名
例:if(!FileExists("KC.C"))hnd1=FileCreate("KC.C");