c语言读取文件的方法,求教。该如何处理
c语言读取文件的方法,求教。。。
一个文件server里面的内容是
Domain=29A6DC
OS=Windows 5.1
Server=Windows 2000 LAN Manager
E$# Disk
testfile# Disk
D$# Disk
ADMIN$# Disk
C$# Disk
(Called name not present)//这两行数据不处理
(Called name not present)//这两行数据不处理
Domain=29A6DC
OS=Windows 5.1
Server=Windows 2000 LAN Manager
我想定义一个结构体,读取前三行和后三行做对比。。。。然后再读取
E$# Disk
testfile# Disk
D$# Disk
ADMIN$# Disk
C$# Disk
这些倒结构中的一个数组中
我试了用fgets来读取没有成功。。。。。高手能给小弟先讲下思路吗。。。
------解决方案--------------------
方法很多..用fgets一行行读也可以(虽然麻烦点 :P)
你代码中的
struct stu
{
char name[30];
char os[30];
char server[40];
char *disk[5]; // 这只是一个 char* 的数组并没有 "空间", 使用前需要初始化---也可以使用二维 char disk[5][50];
int cont;
}str;
//...
for(i=0;i<5;i++)
{
str.disk[i] = (char *)calloc(50, sizeof(char)); //分配内存, 如使用char disk[5][50]这里就不需要分配内存
fgets(str.disk[i],50,fp);
printf("\n%s",str.disk[i]);
}
// 接着就是后面的数据
char tmp[50];
// 跳过两行
fgets(tmp, 50, fp);
fgets(tmp, 50, fp);
//...读后三行.
//...
// 记得 free()
// 对于这种数据,我多数会用 scanf 系列来完成
------解决方案--------------------
1.存在那么个文件
如果没有在main函数里一个server,最省力的办法是写个txt复制到相关c源程序所在的目录中
2.经验证此段代码可以读取 前三行 也可以读取后三行。 如法炮制即可。
3.换个花样就成结构体了
#include<stdio.h>
void qian3(char k[][40]);
void hou3(char k[][40]);
main()
{char k[6][40];
qian3(k);
hou3(k);
}
void qian3(char k[][40])
{FILE *fp;
int i;
fp=fopen("server.txt","r");
fgets(k[0],39,fp);
fgets(k[1],39,fp);
fgets(k[2],39,fp);
fclose(fp);
for(i=0;i<3;i++)
puts(k[i]);
}
void hou3(char k[][40])
{FILE *fp;
int i=0;
fp=fopen("server.txt","r");
while(i<10)
if(getc(fp)=='\n')i++;
fgets(k[3],39,fp);
fgets(k[4],39,fp);
fgets(k[5],39,fp);
fclose(fp);
for(i=3;i<6;i++)
puts(k[i]);
}
一个文件server里面的内容是
Domain=29A6DC
OS=Windows 5.1
Server=Windows 2000 LAN Manager
E$# Disk
testfile# Disk
D$# Disk
ADMIN$# Disk
C$# Disk
(Called name not present)//这两行数据不处理
(Called name not present)//这两行数据不处理
Domain=29A6DC
OS=Windows 5.1
Server=Windows 2000 LAN Manager
我想定义一个结构体,读取前三行和后三行做对比。。。。然后再读取
E$# Disk
testfile# Disk
D$# Disk
ADMIN$# Disk
C$# Disk
这些倒结构中的一个数组中
我试了用fgets来读取没有成功。。。。。高手能给小弟先讲下思路吗。。。
------解决方案--------------------
方法很多..用fgets一行行读也可以(虽然麻烦点 :P)
你代码中的
struct stu
{
char name[30];
char os[30];
char server[40];
char *disk[5]; // 这只是一个 char* 的数组并没有 "空间", 使用前需要初始化---也可以使用二维 char disk[5][50];
int cont;
}str;
//...
for(i=0;i<5;i++)
{
str.disk[i] = (char *)calloc(50, sizeof(char)); //分配内存, 如使用char disk[5][50]这里就不需要分配内存
fgets(str.disk[i],50,fp);
printf("\n%s",str.disk[i]);
}
// 接着就是后面的数据
char tmp[50];
// 跳过两行
fgets(tmp, 50, fp);
fgets(tmp, 50, fp);
//...读后三行.
//...
// 记得 free()
// 对于这种数据,我多数会用 scanf 系列来完成
------解决方案--------------------
1.存在那么个文件
如果没有在main函数里一个server,最省力的办法是写个txt复制到相关c源程序所在的目录中
2.经验证此段代码可以读取 前三行 也可以读取后三行。 如法炮制即可。
3.换个花样就成结构体了
#include<stdio.h>
void qian3(char k[][40]);
void hou3(char k[][40]);
main()
{char k[6][40];
qian3(k);
hou3(k);
}
void qian3(char k[][40])
{FILE *fp;
int i;
fp=fopen("server.txt","r");
fgets(k[0],39,fp);
fgets(k[1],39,fp);
fgets(k[2],39,fp);
fclose(fp);
for(i=0;i<3;i++)
puts(k[i]);
}
void hou3(char k[][40])
{FILE *fp;
int i=0;
fp=fopen("server.txt","r");
while(i<10)
if(getc(fp)=='\n')i++;
fgets(k[3],39,fp);
fgets(k[4],39,fp);
fgets(k[5],39,fp);
fclose(fp);
for(i=3;i<6;i++)
puts(k[i]);
}