用C语言写个读DAT文件的程序

时间:2021-11-29 09:17:19
就是QQ文件里的dat文件
或者指导一下也行,本人试了试,总是不行
很郁闷
望高手指教

13 个解决方案

#1


fread试试,读取2进制的内容。

#2


二进制读取,解析内容,当然你得知道文件里是什么

#3


c写任何文件都是用fread

#4


fgets,也可以读文件的这个是C程序的,fread 是C++的

#5


fopen
..
fread
..
fclose

#6


#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,arr[200]={0};
FILE *fp1,*fp2;
if((fp1=fopen("D:ser","w"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
printf("sucess!\n");
if((fp2=fopen("D:LoginUinList.dat","rb"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
printf("sucess!\n");
do
{
        fwrite(arr,16,1,fp2);
}
while(fp2!=1);
for(i=0;i<200;i++)
{
printf("%10d",arr[i]);
if(i%5==0)printf("\n");
}
for(i=0;i<200;i++)
{
printf("%10c",arr[i]);
if(i%5==0)printf("\n");
}
  fclose(fp1);
fclose(fp2);
}
这是本人写的  麻烦大家看看  为什么不行呢

#7


if((fp2=fopen("D:LoginUinList.dat","rb"))==NULL)
==》
if((fp2=fopen("D:\\LoginUinList.dat","rb"))==NULL)

文件名称中,路径的\符号不要漏了,需要使用转义字符

其他文件名、路径相关的类似修正

#8


看到瞌睡虫那些个勋章,羡慕~~ 

#9


fopen("xxx.dat","rb"),fgetc,fclose.

#10


恩,只要注意读取的时候是二进制读取就可以的

#11


请问瞌睡虫  为什么运行时两个文件都能正常打开   输出两个sucess  后面的为什么就不能再输出了呢

#12


要保证d盘根目录下LoginUinList.dat文件有存在,不然以二进制只读方式打开文件会失败

#include<stdio.h>
#include<stdlib.h>

void main()
{
int i, arr[200] = {0};
FILE *fp1,*fp2;
/*if((fp1=fopen("D:ser","w"))==NULL) {*/
if((fp1=fopen("D:\\ser","w"))==NULL) {
printf("cannot open this file\n");
exit(1);
}
printf("sucess!\n");
/*if((fp2=fopen("D:LoginUinList.dat","rb"))==NULL) {*/
if((fp2=fopen("D:\\LoginUinList.dat","rb"))==NULL) {
printf("cannot open this file\n");
exit(1);
}
printf("sucess!\n");
//do {
/*fwrite(arr,16,1,fp2);*/
fread(arr, 200, 1, fp2);  /*读文件内容到数组arr*/
fwrite(arr, 200, 1, fp1); /*将arr数组中的内容写到文件*/
//} while(fp2 != 1);
for(i=0;i<200;i++) {
printf("%10d",arr[i]);
if(i%5 == 0)
printf("\n");
}
for(i=0;i<200;i++) {
printf("%10c",arr[i]);
if(i%5==0)
printf("\n");
}
fclose(fp1);
fclose(fp2);
}

#13


用fread~~~~

#1


fread试试,读取2进制的内容。

#2


二进制读取,解析内容,当然你得知道文件里是什么

#3


c写任何文件都是用fread

#4


fgets,也可以读文件的这个是C程序的,fread 是C++的

#5


fopen
..
fread
..
fclose

#6


#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,arr[200]={0};
FILE *fp1,*fp2;
if((fp1=fopen("D:ser","w"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
printf("sucess!\n");
if((fp2=fopen("D:LoginUinList.dat","rb"))==NULL)
{
printf("cannot open this file\n");
exit(0);
}
printf("sucess!\n");
do
{
        fwrite(arr,16,1,fp2);
}
while(fp2!=1);
for(i=0;i<200;i++)
{
printf("%10d",arr[i]);
if(i%5==0)printf("\n");
}
for(i=0;i<200;i++)
{
printf("%10c",arr[i]);
if(i%5==0)printf("\n");
}
  fclose(fp1);
fclose(fp2);
}
这是本人写的  麻烦大家看看  为什么不行呢

#7


if((fp2=fopen("D:LoginUinList.dat","rb"))==NULL)
==》
if((fp2=fopen("D:\\LoginUinList.dat","rb"))==NULL)

文件名称中,路径的\符号不要漏了,需要使用转义字符

其他文件名、路径相关的类似修正

#8


看到瞌睡虫那些个勋章,羡慕~~ 

#9


fopen("xxx.dat","rb"),fgetc,fclose.

#10


恩,只要注意读取的时候是二进制读取就可以的

#11


请问瞌睡虫  为什么运行时两个文件都能正常打开   输出两个sucess  后面的为什么就不能再输出了呢

#12


要保证d盘根目录下LoginUinList.dat文件有存在,不然以二进制只读方式打开文件会失败

#include<stdio.h>
#include<stdlib.h>

void main()
{
int i, arr[200] = {0};
FILE *fp1,*fp2;
/*if((fp1=fopen("D:ser","w"))==NULL) {*/
if((fp1=fopen("D:\\ser","w"))==NULL) {
printf("cannot open this file\n");
exit(1);
}
printf("sucess!\n");
/*if((fp2=fopen("D:LoginUinList.dat","rb"))==NULL) {*/
if((fp2=fopen("D:\\LoginUinList.dat","rb"))==NULL) {
printf("cannot open this file\n");
exit(1);
}
printf("sucess!\n");
//do {
/*fwrite(arr,16,1,fp2);*/
fread(arr, 200, 1, fp2);  /*读文件内容到数组arr*/
fwrite(arr, 200, 1, fp1); /*将arr数组中的内容写到文件*/
//} while(fp2 != 1);
for(i=0;i<200;i++) {
printf("%10d",arr[i]);
if(i%5 == 0)
printf("\n");
}
for(i=0;i<200;i++) {
printf("%10c",arr[i]);
if(i%5==0)
printf("\n");
}
fclose(fp1);
fclose(fp2);
}

#13


用fread~~~~