在编写Windows程序中,打开文件用fopen好呢?还是用CreateFile好? CFile 简单函数很多看你选择。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 fopen 是 C运行库函数,定义于 stdio.h 文件中,它是平台无关的,不管你使用 gcc 还是 vc++ 编译器都可以;而 CreateFile 是一个 win32 API 函数,是与平台有关的。据我所知,像 fopen 、printf 、malloc 等等函数,C++标准的制定者 ISO 只是大致规定了其功能,却并没有给出具体定义,因此各个编译器厂商都有一套自己的实现方法。对于微软而言,它在实现这些函数的时候,最终都是调用了自己的 win32 API ,比如 malloc 由 msvcrt.dll 文件导出,而该动态链接库在实现 malloc 函数时,内部使用了 windows 的堆内存分配函数(HeapAlloc等等)。不信的话,自己可以做实验验证。如果是开发普通软件的话,建议使用 CreateFile 这样的 win32 API ,因为它的功能较多,它可以干很多事情,能打开或创建控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道等等对象并返回可操控的句柄。而 fopen 的功能就单一了,只是打开文件而已。 开发的是Windows方面的软件用CFile类 fopen是C语言的库函数,在windows平台上,fopen内部实际调用的也是CreateFile如果你只是为了读写文件的话,一般用C语言提供的库函数fopen或C++的STL提供的fstream或者MFC提供的CFile。这些用起来都比较方便,一两个参数就能打开文件。如果你要进行一些特殊的功能的话,比如3楼提到的打开磁盘驱动器,通信资源,邮槽,管道,或者说你要跨进程共享文件句柄以及为文件句柄定制一些安全属性的话才用CreateFile。 个人觉得在windows下, 不一定非要使用windows api来做, 有方便的库, 为什么不用呢?CreateFile的那一大堆参数, 都够你研究好久了.fopen简单明了. 求跨进程共享文件句柄的方法,有人说在《Windows核心编程》上,可是那一本书如此庞大,我根本没看过,没法找啊,求方法。 跨进程共享句柄的方法很多,比如对象句柄继承、命名对象、复制对象句柄,这些都在《Windows核心编程》3.3节讲到了。用对象句柄继承的方式举个例子:A进程用CreateFile打开一个文件,CreateFile的第四个参数是LPSECURITY_ATTRIBUTES lpSecurityAttributes安全属性。默认情况下我们是写NULL。这时我们需要构造一个SECURITY_ATTRIBUTES结构体,其中的BOOL bInheritHandle;赋值为TRUE。表示可以继承句柄。然后用CreateProcess来创建一个B进程,其中CreateProcess的第五个参数BOOL bInheritHandles要为TRUE,表示继承可继承的句柄到该进程。让后这个文件句柄就可以直接发给B进程用了。 继承对象得用来父子进程中,可我的程序,是一个输入法DLL,是需要嵌入到不同的应用程序中的,它们不存在父子关系。好象继承对象就不能用了。我想到过命名对象。就象内存映射文件那样可以起个名字,然后别的进程用这个名字打开它。可是用CreateFile创建的文件句柄,能给它起个名字吗?我在参数中没有找到。如果不能给文件句柄命名,那就只剩下复制对象句柄了,这个如何做?我真的不知道。求详细一点的代码,很简单的,就是一个进程中用CreateFile打开了一个文件,返回一个句柄。别的进程(和它没有父子关系)想使用这个句柄,该怎么办呢?我非常渴望知道方法。这样我的程序就可以大大简化了。非常非常渴望得到方法。 用复制对象句柄应该可以,具体我也没试过,你可以看下网上的资料和《windows核心编程》。但是在跨进程的软件开发中,进程间通信、跨进程共享资源,一般不会直接共享这些比较高级的对象(指针、C++对象、句柄),而是共享低级的数据。 互联网时代, 从API的学习成本来看, 没有差别. 有差别的只是某些技术细节, 如果你愿意花时间可以自己写代码来研究其中的细节差异.今天写代码的时候, 一直沿用我以前编写的一个GetFileSize来获取指定路径下的文件的大小. 可我发现, 这个函数得不到一个一直在变化中的文件的大小. 不断地使用搜索引擎后, 并编写测试代码后, 把原来的关键API->FindFirstFileI, 替换为更底层的_open _iseek64 _close的标准C库后, 需求实现了. 需求是关键, 态度决定一切. vs2005 release版本提示 正常初始化0xc0000034失败 已知一个.url文件的文件路径和文件名,如何得到其网址? 结束Dialog对话框时Debug Assertion Failed 函数中实现ctrl+c 复制的功能 怎么让控件不消失 控件句柄的问题 象录音机调音量的那种旋转按钮怎么做? 高分请教,如何获得“正在进行的共享连接” 如何判断一个文件已经被打开(读或写)? 帮助一下菜鸟吧 URLDownloadToFile中断后再下载的问题 对于从来没接触过VC++甚至更没接触过MFC的想学MFC基本对话框
如果你只是为了读写文件的话,一般用C语言提供的库函数fopen或C++的STL提供的fstream或者MFC提供的CFile。这些用起来都比较方便,一两个参数就能打开文件。
如果你要进行一些特殊的功能的话,比如3楼提到的打开磁盘驱动器,通信资源,邮槽,管道,或者说你要跨进程共享文件句柄以及为文件句柄定制一些安全属性的话才用CreateFile。
CreateFile的那一大堆参数, 都够你研究好久了.
fopen简单明了.
求跨进程共享文件句柄的方法,有人说在《Windows核心编程》上,可是那一本书如此庞大,我根本没看过,没法找啊,求方法。
A进程用CreateFile打开一个文件,CreateFile的第四个参数是LPSECURITY_ATTRIBUTES lpSecurityAttributes安全属性。默认情况下我们是写NULL。这时我们需要构造一个SECURITY_ATTRIBUTES结构体,其中的BOOL bInheritHandle;赋值为TRUE。表示可以继承句柄。然后用CreateProcess来创建一个B进程,其中CreateProcess的第五个参数BOOL bInheritHandles要为TRUE,表示继承可继承的句柄到该进程。让后这个文件句柄就可以直接发给B进程用了。
但是在跨进程的软件开发中,进程间通信、跨进程共享资源,一般不会直接共享这些比较高级的对象(指针、C++对象、句柄),而是共享低级的数据。
有差别的只是某些技术细节, 如果你愿意花时间可以自己写代码来研究其中的细节差异.今天写代码的时候, 一直沿用我以前编写的一个GetFileSize来获取指定路径下的文件的大小.
可我发现, 这个函数得不到一个一直在变化中的文件的大小. 不断地使用搜索引擎后, 并编写测试代码后, 把原来的关键API->FindFirstFileI, 替换为更底层的
_open _iseek64 _close的标准C库后, 需求实现了. 需求是关键, 态度决定一切.