用C读取文件内容

glhz610 2010-05-12 10:03:48
用C写了一个类似记事本的程序,即像记事本一样,在选择文件—打开后,能读取所选文件的类容,但是我写的每次只能读取文件内容的第一行,无法读完全部内容,虽然我知道用循环语句可以解决这个问题,但是,却不知道如何使用这个循环,主要在于如可控制这个循环,怎样判断什么时候读完文件内容,跳出循环....下面的是读取文件的代码:
case ID_MENUOPEN:
{
OPENFILENAME ofn;

char szFile[MAX_PATH];

ZeroMemory(&ofn,sizeof(ofn));

ofn.lStructSize = sizeof(ofn);

ofn.lpstrFile = szFile;

ofn.lpstrFile[0] = TEXT('\0');

ofn.nMaxFile = sizeof(szFile);

ofn.lpstrFilter = TEXT("ALL\0*.*\0Text\0*.TXT\0CPP\0*.CPP\0");

ofn.nFilterIndex = 1;

ofn.lpstrFileTitle = NULL;

ofn.nMaxFileTitle = 0;

ofn.lpstrInitialDir = NULL;

ofn.hwndOwner = hwnd;

ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

if (GetOpenFileName(&ofn)) \\这里开始读取文件

{
FILE *fp=fopen(szFile,"r");//下面的循环语句不知道怎么写,望大虾指教!
char ch[256];
fgets(ch,sizeof(ch),fp);
fclose(fp);
SetDlgItemText(hwnd,IDC_EDIT1,ch);\\这里每次只能读取文件的第一行内容


}

}
...全文
622 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
glhz610 2010-05-13
  • 打赏
  • 举报
回复
谢谢楼上的朋友,明白了 呵呵
Cricketol 2010-05-13
  • 打赏
  • 举报
回复
最好这么做:
fseek(f, 0L, SEEK_SET);
fseek(f, 0L, SEEK_END);
length = ftell(f); //获取文件长度
fseek(f, 0L, SEEK_SET);
while(length > 0)
{
fget();
length--;
......
}

也不一定是一次一个字节,可以用fread一次读多个字节,length再减去相应长度就可以了
__Jun__ 2010-05-13
  • 打赏
  • 举报
回复
FILE *fp=NULL ,这句少了个分号,FILE *fp=NULL;
__Jun__ 2010-05-13
  • 打赏
  • 举报
回复
FILE *fp=NULL 
char buffer[256];
char ch=0;
int i=0;

fp = fopen(szFile,"r");
if (NULL != fp)
{
fseek(fp, 0, SEEK_SET);

while(1)
{
ch = fgetc(fp);
if (ch == EOF || i > 256-2)
{ //文件末尾或buffer已满,跳出循环
break;
}

buffer[i] = ch;
i++;
}

fclose(fp);
fp = NULL;
}


LZ看一下这样可不可以,如果文件不是很大的话,可以一次读完文件。
glhz610 2010-05-13
  • 打赏
  • 举报
回复
楼上的朋友,能写完整点吗,因为我还不熟悉上面的函数功能...在循环中,我尝试将读取的字节存放到字符数组中,但最终依然无法读出...
wuyu637 2010-05-12
  • 打赏
  • 举报
回复
while( fgets(test, 100, fp) != NULL )
{
xxx
}

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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