在我们想进行文件操作时,有时往往不知道该从何下手,因为有太多选择了。
首先,我们可以采用喜之郎CC的C语言函数库里(C Run-Time Library)提供的函数,来打开文件:
FILE *fopen(
const char *filename,
const char *mode
);
关于fopen函数的具体的解释敬请到MSDN上查找,除此之外,Windows还提供了另外的选择,我们可以使用Win32 API函数进行同样的操作。脾气暴躁的同学可能就会问了,微软为什么要这么干呢?是不是吃饱了撑了。这个问题还真不好回答,我也不知道微软这么干究竟是为了什么,但是看到下面API函数CreateFile的声明,同学们马上就能想到:多参数函数虽然给使用者带来了不少麻烦,但这同时也是功能强大的标志。使用Windows提供的API,我们可以更详细指定文件的共享模式和安全属性等选项,但较C的库函数,有一个致命的缺点,乃是不易移植到其它操作系统。CreateFile的函数原型:
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
上面说到Win32 API参数多,往往难于使用,针对这种情况,盖茨和他的Microsoft怎能坐视不管?MFC就是为了降低使用者门槛而推出,以MFC中封装了文件操作的CFile类为例。CFile成员函数的接口较之raw API是非常的清爽,内底里,CFile最终也还是调用Win32 API函数,MFC只不过是裹了蜜糖的Win32 API(当然,提供的应用程序框架也很强大)。空口无凭,以代码为证:
// In FILECORE.CPP
BOOL CFile::Open(LPCTSTR lpszFileName, UINT nOpenFlags,
CFileException* pException)
{
// ASSERT this ASSERT that
// Set parameter
// ......
// attempt file creation
HANDLE hFile = ::CreateFile(lpszFileName, dwAccess, dwShareMode, &sa,
dwCreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);
// .......
return TRUE;
}
回到文章开头的问题,我们该选择函数库呢?如果你要跨平台,我觉得你最好选择使用CRT里的函数;如果是在Windows上跑的程序非C++程序,老实的选择Win32 API吧;而如果你的C++程序已经和MFC产生了纠葛(由MFC APPWizard产生),那文件操作时使用MFC中的类则是顺理成章的事情。
分享到:
相关推荐
可以通过以下几种方式来判断界面库类产品的效率: 拖拽窗口,观察是否有明显的停顿感。 可在一个系统下,找一些知名软件比较,如QQ/MSN等。如果有明显差异,则说明界面库在界面的绘制等方面存在欠缺。 拖拽...
作了一些特殊处理以同时支持WinCE5和WinCE6,主要实现shell中的功能,提供的各种操作涉及到文件系统、窗口管理、进程管理和流程控制几个方面,通过解析配置文件内容来执行相应的操作,属于一种脚本解析程序。...
56.7 几种循环的比较 79 6.8 break 和 continue语句 79 6.8.1 break 语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 ...
56.7 几种循环的比较 79 6.8 break 和 continue语句 79 6.8.1 break 语句 79 6.8.2 continue 语句 80 6.9 程序举例 81 7 数组 7.1 一维数组的定义和引用 82 7.1.1 一维数组的定义方式 82 7.1.2 一维数组元素的引用 ...
8.5.2 visual c++工程中调用matlab数学函数库的环境设置 8.6 小结.. 第9章 通过matlab add-in实现混合编程 9.1 matlab add-in简介 9.2 matlab add-in安装和在visual c++中的环境设置 9.3 通过matlab add-in生成独立...
3.4.2 文件操作命令 3.4.3 文件打包压缩命令 3.5 文本处理命令 3.6 信息显示命令 3.7 基本网络操作命令 第4章 Linux字符界面操作进阶 4.1 提高工作效率 4.1.1 命令行补全 4.1.2 命令历史 4.1.3 命令别名 4.2 重定向...
作了一些特殊处理以同时支持WinCE5和WinCE6,主要实现shell中的功能,提供的各种操作涉及到文件系统、窗口管理、进程管理和流程控制几个方面,通过解析配置文件内容来执行相应的操作,属于一种脚本解析程序。...
摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...
10.3.1 基于I/O函数库的文件I/O 314 10.3.2 基于I/O类库的文件I/O 320 10.4 字符串I/O 327 10.5 小结 328 10.6 习题 329 第11章 异常处理 330 11.1 异常的概念 330 11.2 C++异常处理机制 331 11.2.1 try、throw以及...
等数种文件格式; 4.调试版本具有全面的dump和trace语句,便于调试; 5.操作全面,运算速度较快,本人的程序里用到500阶的,很快,比python的numpy库快; 6.基于double值,适用于科学计算,不是模板类; 7.需要特别...
7.2 常见的几种创建进程的方法 148 7.2.1 使用WinExec() 函数 148 7.2.2 使用ShellExecute()和ShellExecuteEx()函数 149 7.2.3 使用CreateProcess()函数 151 7.2.4 使用OLE激活服务程序 154 7.3 如何获得进程...
该函数库实现了基本的解释器,它有一套实现变量、流程控制和过程的核心脚本命令,而且还有一组用来存取操作系统服务以运行其他程序、存取文件系统和使用网络套接字的命令。Tcl和Tk提供了一台可以在UNIX、Windows和...
19.1.5 其他几种迭代器 565 19.2 容器 566 19.2.1 连续容器 566 19.2.2 容器适配器栈和队列 570 19.2.3 关联容器集合和映射 572 19.2.4 效率 575 19.3 泛型算法 576 19.3.1 运行时间和大O记法 576 19.3.2 ...
内含远程控制、进程管理、文件操作、视频控制、注册表操作、客户端服务器端。 redui_src_v0.9.130(DirectUI 3D) DirectUI 3D界面库。 sdk(界面库) RINGSDK包含界面库和图象库。 绘MFC基本控件 ) 如题。 ...
摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、...
6.2 PHP中文件操作详解 93 6.2.1 打开文件 93 6.2.2 关闭文件 94 6.2.3 读取文件 94 6.2.4 写入文件 95 6.2.5 删除文件 96 6.2.6 复制文件 96 6.3 本地文件的操作实例——小型留言本 96 6.3.1 留言发表模块 96 6.3.2...
09_文件操作api基本概念 10_按照字符读写文件 11_按照行方式操作文件 12_按照块的方式操作文件 13_中午课程回顾 14_配置文件读写案例功能介绍 15_配置文件读写案例_接口设计 16_配置文件读写案例_集成框架搭建 17_...
对“info make”的翻译整理,不是一个纯粹的...中的哪些源文件需要编译以及如何编译、需要创建那些库文件以及如何创建这些库文 件、如何最后产生我们想要得可执行文件。尽管看起来可能是很复杂的事情,但是为工 程编写