关于API函数(100分)

  • 主题发起人 主题发起人 anni9977
  • 开始时间 开始时间
A

anni9977

Unregistered / Unconfirmed
GUEST, unregistred user!
各位师兄、师姐,请问在DELPHI5.0中提取文件的主文件名用什么函数呀,例如提取扩展名用ExtractFileExt,希望知道的提示一下,在这儿先谢谢好心人了。
 
Extracts the name and extension parts of a file name.
Unit
SysUtils
Category
file name utilities
function ExtractFileName(const FileName: string): string;
Description
The resulting string is the rightmost characters of FileName, starting with the first character after the colon or backslash that separates the path information from the name and extension. The resulting string is equal to FileName if FileName contains no drive and directory parts.
Note: This function works for multi-byte character systems (MBCS).
FileExists, RenameFile, FileCreate, FileWrite, FileClose, ExtractFileName Example
The following example uses a button, a string grid, and a Save dialog box on a form. When the button is clicked, the user is prompted for a filename. When the user clicks OK, the contents of the string grid are written to the specified file. Additional information is also written to the file so that it can be read easily with the FileRead function.
procedure TForm1.Button1Click(Sender: TObject);
var
BackupName: string;
FileHandle: Integer;
StringLen: Integer;
X: Integer;
Y: Integer;
begin
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
begin
BackupName := ExtractFileName(SaveDialog1.FileName);
BackupName := ChangeFileExt(BackupName, '.BAK');
if not RenameFile(SaveDialog1.FileName, BackupName) then

raise Exception.Create('Unable to create backup file.');
end;
FileHandle := FileCreate(SaveDialog1.FileName);
{ Write out the number of rows and columns in the grid. }
FileWrite(FileHandle,
StringGrid1.ColCount, SizeOf(StringGrid1.ColCount));
FileWrite(FileHandle,
StringGrid1.RowCount, SizeOf(StringGrid1.RowCount));
for X := 0 to StringGrid1.ColCount ?1do
begin

for Y := 0 to StringGrid1.RowCount ?1do
begin
{ Write out the length of each string, followed by the string itself. }
StringLen := Length(StringGrid1.Cells[X,Y]);
FileWrite(FileHandle, StringLen, SizeOf(StringLen));
FileWrite(FileHandle,
StringGrid1.Cells[X,Y], Length(StringGrid1.Cells[X,Y]);
end;
end;
FileClose(FileHandle);
end;

end;
 
ExtractFileName(ParamStr(0))
 
同意楼上的,
补充说一下
extractfilepath(取得文件路和径)最后带'/'
extractfiledir(同上一样)最后不带'/'
 
to chnplzh、张无忌、yaoqiaofeng
你们说的好像都不是我想要的结果呀!我的意思是说比如现在有文件c:/yyy.txt我想要的结果是c:/yyy而不是c:或c:/,请大家再想一想吧
 
你用Length(ExtractFileExt())取得文件扩展名的长度,在用Delete函数或Copy函数取得文件名字符串中除去扩展名和‘.’的部分不就是了。
 
to bluebridge
你不感觉这样太麻烦了吗?如想这样的话我就不会跑到这儿来发帖子了!
 
借花献佛
borland c++ bulder的文件操作总结-4
在BCB中也提供了文件操作的函数,这些函数的功能和前面所介绍的大致相同,但这类函数和BCB关系紧密,能使用BCB中的AnsiString等数据类型,在BCB中用这种方式的文件操作是最方便的,下面我就把这种文件操作详细介绍。
  在BCB提供的这组文件操作函数中,可分为三种类型,就是: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");
_________________
努力努力再努力!
 
ExtractFileName(FileName:String):String;
 
to kerbcurb
不好意思你说了这么多好像还是没有我真正需要的东西。我的意思是说比如现在有文件c:/yyy.txt我想要的结果是c:/yyy而不是c:或c:/,请大家再想一想吧
 
这种情况我喜欢用
ChangeFileExt(ParamStr(0), '');
 
to hiyaolee
你说的这个函数还是带有扩展名的
 
to tseug
我也试过用这个函数,但它并没有改实际的文件名,我想读取改了名的文件没法访问呀,你访问过吗
 
filename := 'c:/yyy.txt';
filename := Copy(filename,1,LastDelimiter('.',filename)-1);
//这样不就可以了吗?用个copy啊
 
如果你先根本改变文件的名字,用Rename(FileName, ChangeFileExt(FileName, ''))不就行了
 
楼主挺有意思的:
你想得到文件名-------带路径-------不要扩展名------只需要得到这个字符串
| | |
| | |-----------还需要通过这个字符串返回来改变文件名字
| |
| |---------要扩展名------只需要得到这个字符串
| |
| |-----------还需要通过这个字符串返回来改变文件名字
|
|---------------不带径-------不要扩展名------只需要得到这个字符串
| |
| |-----------还需要通过这个字符串返回来改变文件名字
|
|---------要扩展名------只需要得到这个字符串
|
|-----------还需要通过这个字符串返回来改变文件名字

你想得到文件名(FileName);
带路径(FileName);
不带路径(FileName:=ExtractFileName(FileName:String):String;)
带扩展名(FileName)
不带扩展名(FileName:=ChangeFileExt(FileName, ''));
不需要修改文件;
需要修改文件(Rename(OldFileName, FileName))
 
to aizb、bluebridge、chnplzh、hiyaolee、kerbcurb、tseug、yaoqiaofeng、来如风、张无忌
我看大家对我的问题还是很积极的,谢谢大家的支持,不过我对来如风的做法还是比较满意的,所以我给他的分要多一点了,不过别人也是都有份的大家看怎么样?
 
多人接受答案了。
 
后退
顶部