高级语言中文件操作的统一利器——API函数

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:sms888
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:利用高级语言开发软件项目时,经常需要解决的问题是文件操作问题,旨在以PowerScript语言为例解析如何利用API函数解决文件操作问题,并类推到其它语言。
  关键词:API;DLL;外部函数
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2007)03-10883-02
  
  1 引言
  
  利用高级语言开发软件项目时,经常需要解决的问题是文件操作问题,比如,建立一个目录,打开一个文件,保存一个文件等,不管利用那种高级语言,这部分的解决有一个统一的方案---利用API函数解决,本文以PowerBuilder中的PowerScript语言为例说明如何利用API函数解决文件操作问题,读者可以类推到其他的高级语言中。
  
  2 Windows API 技术
  
  2.1 定义
  Windows API 技术是由一系列的底层函数(这些底层函数放在系统动态链接库中)提供给用户的编程途径。API函数有16位平台和32位平台。
  2.2 API函数与动态库
  Windows 操作系统下的API函数大都放在动态链接库中,动态链接库的后缀一般为dll或exe,所以在使用API函数之前要先声明。
  对于PowerBuilder而言,通常认为,PowerBuilder提供的函数为内部函数,通过API调用的函数为外部函数。使用API主要包括:外部函数定义和调用、数据类型转换、参数传递。
  根据外部函数的作用范围,外部函数可以分为两种类型:全局外部函数和局部外部函数。全局外部函数可在应用、窗口、菜单、用户对象等位置定义,并能在应用程序的任何脚本中调用。局部外部函数可在窗口、菜单、用户对象中定义,并成为对象的一部分,只能在对象内部调用,其封装性好。
  根据有、无返回值,PowerBuilder又将外部函数分为两种类型:FUNCTION(函数)和SUBROUTINE(子程序),其区别是函数有返回值,子程序无返回值。
  FUNCTION的定义格式如下:
  {access} FUNCTION returndatatype name ( {{REF} datatypel argl,…,{REF} datatypen argn} ) LIBRARY "libname" ALLAS FOR "extname“access为局部函数访问级别,分以下三级:
  (1)Public:(缺省)在应用程序的任何脚本中使用;
  (2)Private:只在该函数所在对象事件脚本中使用;
  (3)Protected:只在该函数所在对象及其后代事件脚本中使用。
  Returndatatype:为函数返回类型,此类型应与PowerScript类型匹配。
  Name: 为外部函数在DLL中的函数名。
  REF: 为变量通过引用方式传递。
  Datatype: 为外部函数中参数类型。
  Argl, …,Argn: 为外部函数中的参数名。
  Libname: 为包含外部函数的DLL或EXE文件名
  Extname: 为函数别名。
  参数传递有二种方式:引用传递;值传递。
  例如:FUNCTION Boolean increase (REF int valuel, int value2) Library“MyDLL.DLL”
  其中,valuel为引用传递,value2为值传递。
  注意:
  (1)当一个动态链接库被装入到内存中以后,只会有一个实例,而不会因为多个程序使用同一个动态链接库而在内存中产生多个拷贝;
  (2)搜索动态连接库的顺序:当前目录,Windows目录,Windows System 目录。
  2.3 API函数举例
  文件拷贝是Windows应用常见的操作,但在PowerBuilder中并没有文件拷贝函数,只能通过调用 Windows API实现。
  定义局部外部函数:
  FUNCTION Boolean CopyFileA(string sfname,string tfname,Boolean bfail) Library “kernel 32.dll”
  “拷贝”按钮的Cliked事件脚本:
  string sfilename, tfilename
  Boolean bfail, ret
  Sfilename=sle_1.text
  Tfilename=sle_2.text
  Bfail=true
  Ret=CopyFileA(sfilename, tfilename, bfail)
  If ret then
  Messagebox(“提示”,“文件拷贝完成!”)
  Else
  Messagebox(“提示”, “文件拷贝失败!”)
  End if
  如复制之前需要打开源文件并且创建一个目录,并且该窗口提供删除文件功能,如下图:
  全局外部函数的声明
  FUNCTION boolean CopyFileA(ref string cfrom,ref string cto,boolean flag)&
  library "kernel32.dll"
  Function boolean CreateDirectoryA(ref string pathname,int sa)&
  library "kernel32.dll"
  Function boolean DeleteFileA(ref string filename) LIBRARY "Kernel32.dll"
  创建目录:
  string as_pathName,ls_SecurityAttributes
  boolean rtn
  if sle_5.text<>"" then
  rtn=CreateDirectoryA(sle_5.text,0)
  if rtn=true then
  messagebox("成功","创建文件夹成功")
  else
  messagebox("","不成功")
  end if
  end if
  打开源文件:
  string pname,fname
  integer rtn
  rtn=GetFileOpenName("请选择要复制的文件",pname,fname)
  if rtn=1 then
  sle_3.text=pname
  end if
  复制文件:
  boolean rtn
  if sle_3.text="" then
  messagebox("","未指定源文件")
  elseif sle_4.text="" then
  messagebox("","未指定要復制的目标文件")
  else
  rtn=CopyFileA(sle_3.text,sle_4.text,false)
  if rtn=true then
  messagebox("","success")
  else
  messagebox("","fail")
  end if
  end if
  删除文件:
  boolean rtn
  if sle_1.text="" then
  messagebox("","未指定要删除的文件名称,请先选择要删除的文件")
  else
  rtn=DeleteFileA(sle_1.text)
  if rtn=true then
  messagebox("","删除文件成功")
  else
  messagebox("","删除文件失败")
  end if
  end if
  注意:声明API函数时注意区分函数名的大小写
  vb使用API函数在思路上是一样的,先声明后引用,vb声明API函数CopyFile如下:
  Declare Function CopyFile Lib “kernel32” Alias “CopyFileA”(ByVal ipExistingFileName As String,ByVal lpNewFileName As String,ByVal bFailIfExists As Long) As Long
  C#要实现上述功能要用到两个重要的类:System.IO.File类和System.IO.FileInfo类,System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间。
  
  3 总结
  
  上述只是API函数冰山一角,做项目开发时,如果利用高级语言自身特点完成某些功能有困难时可以考虑利用操作系统自带的API函数。
  参考文献:
  [1]方小伟.PowerBuilder软件开发项目实践[M].清华大学出版社,2004.
  [2]李廷文.Visual Basic开发[M].人民邮电出版社,2005.
  [3]冉林仓.Windows API编程[M].清华大学出版社,2005.
  本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。
其他文献
摘要:简要介绍了嵌入式实时操作系统(RTOS)的概念和技术特点。对μC/OS-II与RTLinux两种具有代表性的开源硬实时操作系统实现原理和性能做了详细的对比分析研究。最后提出了影响实时操作系统的主要因素和提高嵌入式操作系统实时性的解决途径。  关键词:嵌入式实时操作系统;μC/OS-II;RTLinux  中图分类号:TP316文献标识码:A文章编号:1009-3044(2007)03-107
期刊
摘要:为了在应用程序中显示汉字的笔画,介绍了采用曲线轮廓描述技术的TrueType字体,研究分析了TrueType字形描述技术原理和TrueType文件结构,利用字体创建软件建立了汉字笔画的TrueType字体文件。  关键词:TrueType字体;曲线轮廓;FCP  中图分类号:TP391 文献标识码:A文章编号:1009-3044(2007)03-10783-02    1 引言    字体的
期刊
摘要:在分析OpenOffice.org体系结构的基础上,研究软件的国际化与本地化机制,针对维吾尔文字本地化需求进行了一系列定制与开发,形成了一套支持维吾尔文输入输出的OpenOffice.org办公套件。  关键词:OpenOffice.org;维吾尔文;本地化;处理机制   中图分类号:TP317文献标识码:A文章编号:1009-3044(2007)03-10781-02    1 引言   
期刊
摘要:简单回顾了RBAC模型的概念以及属性证书的定义,从理论上探讨了如何应用X509v4标准的属性证书来实现基于角色的权限管理。在访问控制基本框架的和属性权威概念的基础上提出一个具体的RBAC系统,并分析了证书管理、角色指派、决策控制的各个环节。详细探讨了用于实现基于策略的RBAC所用到的一系列相互配合的策略及其之间的联系。   关键词:属性证书;RBAC;X509v4;策略;访问控制;PMI  
期刊
当我们要通过电子形式分发 Office 文档时,文档中可能包含我们不希望让他人看到的信息,如那些被指定为“隐藏”的信息,以及那些允许您与他人协作共同编写文档的信息,其实最简单的比如文件属性中的“摘要”大概就是我们不想让人看到的东西吧(见图1)!   这时我们就可以使用“Office 2003/XP删除隐藏数据” 加载项来进行那些数据的删除工作,通过使用“删除隐藏数据”加载项我们可以永久删除 Wor
期刊
摘要:C语言程序设计是计算机专业的一门基础课程,也是一门核心课,但是长期以来一直存在很多问题。笔者就教学中的问题,提出了四种解决的办法,以促进c语言教学。  关键词:任务驱动;教学方法;形象比喻  中图分类号:G642文献标识码:A 文章编号:1009-3044(2007)03-10876-01    1 引言    随着繁多的计算机语言的出现,C语言一般被当作多种语言的起始点,学好C语言对以后的
期刊
系统本身的截屏功能有时候真是不够用,要截张电影画面都非常费劲。如果直接截取播放器的画面往往是一片黑。要实现视频抓取,你不得不安装一些专业的截屏工具,比如SnagIt等,但它们都是收费的,而且会往系统里装一堆驱动……不要发愁了,如果你肯花一点点时间设置,不用装软件也能截取视频画面。    方法一:关闭DirectX加速    打开“控制面板”的“显示属性”,在“设置”选项卡中点击“高级”按钮,会弹出
期刊
下班了,可是这份急要的资料还没有来得及下载完成。回家倒是也可以下载,但是从头来过是不是太痛苦了点?要不把电脑也扛回家?大可不必这么麻烦,我们不妨巧妙利用快车(FlashGet)的断点续传功能,让下载工作不再会毫无意义的浪费时间。      一、让快车移动起来   快车(FlashGet)是一款准绿色软件,也就是说,只要将快车(FlashGet)安装后的整个文件夹拷贝过来,就可以直接使用。像我这样经
期刊
自Windows Vista(以下简称Vista)面市以来受到很多电脑爱好者们的追捧,一度成为2006年最火爆的操作系统,时至2007年,Vista会在新年里更加吸引众人眼球,这个微软的新宠儿究竟携带了哪些崭新的功能吸人世人?究竟有哪些“鲜为人知”的实用工具令人不得而知?让我们一起走进Windows Vista,来给这些新功能做个全新“盘点”!      一、Windows远程协助“人性化   
期刊
最近,老牌下载工具网际快车发布了最新的1.8版,其最大的特色就在于支持BT下载,同时正式更名为快车;而迅雷、脱兔、BitComet、网络传送带等知名下载工具也相继推出了新版本,增加了不少实用的功能;最让人跌破眼镜的是,腾讯在2006年底的时候推出了一款下载工具“超级旋风”,下载速度直逼其他老牌下载工具。一时间,本已沉寂的下载领域顿时火爆起来,竞争空前激烈,掀起“血雨腥风”,那么谁才是下载领域的王者
期刊