高手进来看一下,这段代码一运行就出错,究竟哪里写错了啊?

kawayide 2005-04-01 04:44:22
我是想写一个这样的功能,先打开一个TXT文件,然后把其中几个字节读到缓冲区里。编译都通过了,可一运行就出错。

static TCHAR szBuffer[20], szFileName[MAX_PATH] ;
static OPENFILENAME ofn ;
.......
case IDM_FILE_OPEN
ofn.lStructSize = sizeof(ofn);
ofn.lpstrFile = szFileName ;
ofn.nMaxFile = MAX_PATH ;
ofn.lpstrDefExt = TEXT ("*.*") ;
ofn.Flags = OFN_FILEMUSTEXIST ;
ofn.hInstance = hInst ; //hInst已经有了
ofn.hwndOwner = hwnd ;
ofn.lpstrFilter = TEXT ("All Files(*.*)\0*.*\0") ;

GetOpenFileName (&ofn)
hFile = CreateFile (szFileName, GENERIC_READ, 0, NULL,OPEN_EXISTING, 0, NULL) ;
SetFilePointer (hFile, 4, 0, FILE_BEGIN) ;
ReadFile (hFile, szBuffer, 8, NULL, NULL) ;
......
就是这样,运行时的错误提示是:"ox77e5abd2"指令应用的ox00000000内存.该内存不能为"writen"
请问什么地方出了问题
...全文
104 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
idAnts 2005-04-01
  • 打赏
  • 举报
回复
对!你看看打开文件是不是有问题,另外文件长度够不够你seek的。
idAnts 2005-04-01
  • 打赏
  • 举报
回复
对!你看看打开文件是不是有问题,另外文件长度够不够你seek的。
AkiraChing 2005-04-01
  • 打赏
  • 举报
回复
会不会是CreateFile 失败,hFile为NULL呢

kawayide 2005-04-01
  • 打赏
  • 举报
回复
文件名正确啊,我把MessageBox()插入最后几行。改成下面的样子
GetOpenFileName (&ofn)
MessageBox (NULL, szFileName, NULL, MB_OK) ; //正确显示文件路径和名称

hFile = CreateFile (szFileName, GENERIC_READ, 0, NULL,OPEN_EXISTING, 0, NULL) ;
MessageBox (NULL, szFileName, NULL, MB_OK) ; //正确显示文件路径和名称

SetFilePointer (hFile, 4, 0, FILE_BEGIN) ;
MessageBox (NULL, szFileName, NULL, MB_OK) ; //正确显示文件路径和名称

ReadFile (hFile, szBuffer, 8, NULL, NULL) ;
MessageBox (NULL, szFileName, NULL, MB_OK) ;

老实说SetFilePointer(),和 ReadFile()我都很不熟,是不是问题就出再这两个函数上呢
bobob 2005-04-01
  • 打赏
  • 举报
回复
只要得到的文件名正确 ,就是你的打开文件的代码有问题
kawayide 2005-04-01
  • 打赏
  • 举报
回复
能看见Open File的对话框啊。就是打开一个文件就出错了。郁闷了一下午了。
bobob 2005-04-01
  • 打赏
  • 举报
回复
static OPENFILENAME ofn={0};

TCHAR szName[MAX_PATH];
*szName = 0;

// Fill in standard structure fields
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = AfxGetMainWnd()->GetSafeHwnd();
ofn.lpstrFilter = "txt files\0*.txt\0All files\0*.*\0";
ofn.lpstrCustomFilter = NULL;
ofn.nFilterIndex = 1;
ofn.lpstrFile = szName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = TEXT("Open File...\0");
ofn.lpstrFileTitle = NULL;
ofn.lpstrDefExt = TEXT("*\0");
ofn.Flags = OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST;


// Create the standard file open dialog and return its result
GetOpenFileName((LPOPENFILENAME)&ofn);
AfxMessageBox(ofn.lpstrFile);
idAnts 2005-04-01
  • 打赏
  • 举报
回复
到哪里出错了?是不是文件没打开啊?
szFileName是怎么定义的?
tankbattle 2005-04-01
  • 打赏
  • 举报
回复
你的ofn.lpstrFilter好像填错了啊,记得是用|分隔的。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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