关于C打开文件

alwin7 2010-06-12 02:55:43
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include <windows.h>
#include <sqlext.h>


#define N 100
char bscname[11]="";
int i=0;
void keywordcmp(FILE *fp_key,char *line_key,char *keyword);

void main()
{
FILE *fp;
char line[N]="";
/*int i,j,k;*/


if((fp=fopen("C:\\test.txt","r"))==NULL)//fopen能不能不指定打开C:\test.txt??而去选择打开某个盘下的某个文件??
{
printf("can not open the test file\n");
exit(0);
}

while(fgets(line,N,fp)!=NULL)
{
char *keyword_zqni="< ZQNI;";
char *keyword_bsc ="BSC";
char *keyword_zeei="< ZEEI;";

keywordcmp(fp,line,keyword_zqni);
keywordcmp(fp,line,keyword_bsc);
strncpy(bscname,line+11,11);
printf("%s\n",bscname);
keywordcmp(fp,line,keyword_zeei);

}



fclose(fp);
system("pause");
}




...全文
251 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
DCMorgan 2010-06-18
  • 打赏
  • 举报
回复
不明白。
b_duan 2010-06-18
  • 打赏
  • 举报
回复
既然你知道char *keyword_zqni="< ZQNI;";

那么文件名也是同样的道理, char * filename = "******";
alwin7 2010-06-18
  • 打赏
  • 举报
回复
暂时看不懂,C++还没学,以后学学,还是谢谢你。。[Quote=引用 7 楼 zzbinfo 的回复:]
需要你自己改一部分,这个只是个例子


C/C++ code
AnsiString __fastcall TForm2::SelectFolder(AnsiString Caption)
{

BROWSEINFO bi; //控制Browse对话框上属性的结构体

LPITEMIDLIST ItemID;

……
[/Quote]
alwin7 2010-06-18
  • 打赏
  • 举报
回复
我还没开始研究呢,等你会了,指导一下,谢谢。。[Quote=引用 8 楼 beginer09 的回复:]
你的意思是要打开一个文件选择的对话框,c语言是控制台程序,要用到windows API才能产生对话框
共同研究ing
[/Quote]
zzbinfo 2010-06-13
  • 打赏
  • 举报
回复
需要你自己改一部分,这个只是个例子

AnsiString __fastcall TForm2::SelectFolder(AnsiString Caption)
{

BROWSEINFO bi; //控制Browse对话框上属性的结构体

LPITEMIDLIST ItemID;

char sDir[MAX_PATH]; //MAX_PATH:系统常量,指最大路径长度

char FolderName[MAX_PATH];

memset(&bi, 0, sizeof(BROWSEINFO)); //清零

memset(sDir, 0, MAX_PATH);

bi.hwndOwner = this->Handle;//Application->Handle; //父窗口句柄
bi.pszDisplayName = FolderName; //存放路径的缓冲区

bi.lpszTitle = Caption.c_str(); //对话框标题

bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_NEWDIALOGSTYLE; //只显示文件系统文件夹

ItemID = SHBrowseForFolder(&bi);

if(ItemID==NULL)

return "";

SHGetPathFromIDList(ItemID, sDir);

GlobalFree(ItemID);

AnsiString PathName=String(sDir);

if(PathName.IsEmpty())

return "";

if(strcmp(PathName.AnsiLastChar(),"\\")!=0)

PathName+="\\"; //添加路径符

return PathName;

}
alwin7 2010-06-13
  • 打赏
  • 举报
回复
没人??
Beginer09 2010-06-13
  • 打赏
  • 举报
回复
你的意思是要打开一个文件选择的对话框,c语言是控制台程序,要用到windows API才能产生对话框
共同研究ing
alwin7 2010-06-12
  • 打赏
  • 举报
回复
“C:\test.txt//C:\\test.txt”没看懂呀
[Quote=引用 2 楼 z569362161 的回复:]
)//fopen能不能不指定打开C:\test.txt??而去选择打开某个盘下的某个文件??

当然没问题。

C:\test.txt//C:\\test.txt
[/Quote]
alwin7 2010-06-12
  • 打赏
  • 举报
回复
如果不用输入路径的方式,而用可视的选择方式,要怎么改??
[Quote=引用 1 楼 shaozg168 的回复:]
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include <windows.h>
#include <sqlext.h>


#define N 100
char bscname[11]="";
int i=0;
void keywordcmp(FILE *fp_key,char *line_key,……
[/Quote]
vanchristin 2010-06-12
  • 打赏
  • 举报
回复
当然可以,你可以把文件名和路径保存在一个字符串中,然后传给fopen
z569362161 2010-06-12
  • 打赏
  • 举报
回复
)//fopen能不能不指定打开C:\test.txt??而去选择打开某个盘下的某个文件??

当然没问题。

C:\test.txt//C:\\test.txt

shaozg168 2010-06-12
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include <windows.h>
#include <sqlext.h>


#define N 100
char bscname[11]="";
int i=0;
void keywordcmp(FILE *fp_key,char *line_key,char *keyword);

void main()
{
FILE *fp;
char line[N]="";
/*int i,j,k;*/

char filename[250] = {0};
scanf("%s", filename);
if((fp=fopen(filename,"r"))==NULL)//可以了
{
printf("can not open the test file\n");
exit(0);
}

while(fgets(line,N,fp)!=NULL)
{
char *keyword_zqni="< ZQNI;";
char *keyword_bsc ="BSC";
char *keyword_zeei="< ZEEI;";

keywordcmp(fp,line,keyword_zqni);
keywordcmp(fp,line,keyword_bsc);
strncpy(bscname,line+11,11);
printf("%s\n",bscname);
keywordcmp(fp,line,keyword_zeei);

}



fclose(fp);
system("pause");
}


完全可以,你可以用一个变量用来输入文件路径。

69,373

社区成员

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

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