怎样用createfile和readfile打开和读取硬盘上已经存在的文件?

debater 2002-03-11 08:52:49
1. 我用createfile打开已存在文件时,第一个参数文件名应该写成什么样格式?很多网友写的似乎是 "c:\\test.txt",但我写成这个样子程序运行时就找不到文件,写成"c: \\
test.txt",这样就可以成功打开文件。请问这是怎么回事?(注意我的写法中在 c: 后面多了一个空格)

2.我如上打开文件后,用readfile读取文件,函数返回值为true,表明读取成功,但返回的已读取字节数却总是零。查msdn,只有文件指针已经指到文件尾时才会发生这种事,但我的文件是刚刚打开的啊。且该文件确实存在,非空,可以用记事本打开。我试图在读取前用setfilepointer强行把文件指针指到文件头再读取,但依旧发生这种错误。

我的程序代码如下:

#include "stdafx.h"
#include <windows.h>
#include <iostream.h>

int main(int argc, char* argv[])
{


HANDLE fileHandle;
char s[ 10];
BOOL success;
DWORD numRead;

fileHandle=CreateFile(
"C: \\test.txt",GENERIC_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

if(fileHandle==INVALID_HANDLE_VALUE)
{
cout<< "error number " << GetLastError()
<< " occured on file open." << endl;
return 0;
}



//success=SetFilePointer(fileHandle,1,0,FILE_BEGIN);




success=ReadFile(fileHandle,s,1,&numRead,0);

cout << success << endl;


cout << numRead;


return 0;


}


请各位多指点,谢谢!

...全文
491 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
debater 2002-03-11
  • 打赏
  • 举报
回复
高手在哪里啊?
debater 2002-03-11
  • 打赏
  • 举报
回复
to sunny_wz(SUNNY): 如果是要加空格补,为什么不是全补而是只在c: 后面加一个空格就可以了,而不是全加呢?
debater 2002-03-11
  • 打赏
  • 举报
回复
TO sunny_wz(SUNNY): 用了这两个宏后还是和原来一样,有空格函数就成功,没空格就错误 2 ,找不到文件。

我的代码贴在下面,请哪一位在自己的机子上试一下,是我的代码的问题还是机子的问题。


#include "stdafx.h"
#include <windows.h>
#include <iostream.h>

int main(int argc, char* argv[])
{


HANDLE fileHandle;
char s[ 10];
BOOL success;
DWORD numRead;

fileHandle=CreateFile(
"C: \\test.txt",GENERIC_READ,FILE_SHARE_READ, 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

if(fileHandle==INVALID_HANDLE_VALUE)
{
cout<< "error number " << GetLastError()
<< " occured on file open." << endl;
return 0;
}



//success=SetFilePointer(fileHandle,1,0,FILE_BEGIN);




success=ReadFile(fileHandle,s,1,&numRead,0);

cout << success << endl;


cout << numRead;


return 0;


}


谢谢!
sunny_wz 2002-03-11
  • 打赏
  • 举报
回复
由于宽字符是双字节的,所以要加空格补.
sunny_wz 2002-03-11
  • 打赏
  • 举报
回复
这样呀,可能是宽字符的问题,你可以
#include<tchar.h>
用_T宏或不包含直接用TEXT宏
sunny_wz 2002-03-11
  • 打赏
  • 举报
回复
这跟你的问题没关系
debater 2002-03-11
  • 打赏
  • 举报
回复
to sunny_wz(SUNNY):
可是在我这里,就差这个空格,加上就可以,函数成功返回,没有就返回错误2,找不到文件。 请问是怎么回事?我的环境是vc 6.0 那个讨厌的倚天中文版,和这个有关系吗?
sunny_wz 2002-03-11
  • 打赏
  • 举报
回复
_T是宽字节宏,它在预编译中识别你是宽字符还是单字符
sunny_wz 2002-03-11
  • 打赏
  • 举报
回复
"c:\\test.txt"和"c: \\test.txt"是同种意思,跟有无空格没关系,应该都可以打开
debater 2002-03-11
  • 打赏
  • 举报
回复
-T 这个宏 识别不了,请问要加入哪个头文件?
Mars_Engle 2002-03-11
  • 打赏
  • 举报
回复
你写的语句有误
fileHandle=CreateFile(
"C: \\test.txt",GENERIC_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
正确应为:
fileHandle= CreateFile( _T("C:\\test.txt"), GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
debater 2002-03-11
  • 打赏
  • 举报
回复
我的程序代码中是如下所写,上面的少了一个参数是因为发贴子copy paste 时遗漏的。

fileHandle=CreateFile("C:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);

此外说明一下。这个文件确实在 c 盘根目录下,否则打开文件时不可能成功返回。

“\" 我也知道这是转义字符,我想知道的是为什么我的程序中路径要有一个空格才能找到文件,否则就找不到?


sunny_wz 2002-03-11
  • 打赏
  • 举报
回复
"c:\\test.txt"是C/C++语言中的字符串,其中\为转议字符,因此这个字符串即是c:\test.txt(根目录下的test.txt文件,可能你的文件不在根目录下,所以找不到)
另你的CreateFile函数调用有错,应该如下:
fileHandle=CreateFile("C:\\test.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
sjhang 2002-03-11
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/524/524139.xml?temp=.1596338
masterz 2002-03-11
  • 打赏
  • 举报
回复
hFile = CreateFile("c:\\test.txt", GENERIC_READ , 0,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
你的createfile好像少了一个参数
debater 2002-03-11
  • 打赏
  • 举报
回复
to sjhang(钱塘居士): 你好象没回答我的问题啊。
sjhang 2002-03-11
  • 打赏
  • 举报
回复
m_strSaveDictionary是文件路径
CString strPassword;
sjhang 2002-03-11
  • 打赏
  • 举报
回复
HANDLE hFile=NULL;
hFile=CreateFile(m_strSaveDictionary,GENERIC_WRITE, FILE_SHARE_WRITE,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile==INVALID_HANDLE_VALUE)
{
AfxMessageBox("Cannot open File"+m_strSaveDictionary);
}
DWORD n;
WriteFile(hFile,strPassword.GetBuffer(strPassword.GetLength()),strPassword.GetLength(),&n,NULL);
debater 2002-03-11
  • 打赏
  • 举报
回复
我的环境是vc 6.0
sunny_wz 2002-03-11
  • 打赏
  • 举报
回复
你的代码我试过,没有问题

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧