乔山办公网我们一直在努力
您的位置:乔山办公网 > office365 > 怎么使用C语言指针读取文件中的内容,求代码-c 获取当前打开的office文件格式,office文件是什么格式

怎么使用C语言指针读取文件中的内容,求代码-c 获取当前打开的office文件格式,office文件是什么格式

作者:乔山办公网日期:

返回目录:office365


  1. 对于程序来说,不管后缀名如何,文件分为e799bee5baa6e997aee7ad94e78988e69d83330两种类型:文本文件和二进制文件。

  2. C语言里有一系列文件操作函数。区分文本和二进制文件,需要在打开文件时设置不同的控制符mode的变量即可。

    fopen的函数原型:FILE * fopen(const char * path,const char * mode);
    fopen函数的第一个参数是文件路径,第二个参数是打开方式,有以下几种方式:
      r 以只读方式打开文件,该文件必须存在。
      r+ 以可读写方式打开文件,该文件必须存在。
      rb+ 读写打开一个二进制文件,允许读数据。
      rw+ 读写打开一个文本文件,允许读和写。
      w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
      w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
      a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
      a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
      wb 只写打开或新建一个二进制文件;只允许写数据。
      wb+ 读写打开或建立一个二进制文件,允许读和写。
      wt+ 读写打开或着建立一个文本文件;允许读写。
      at+ 读写打开一个文本文件,允许读或在文本末追加数据。
      ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
      上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。



因为兄弟文件格式是一行一行的, 且每行开头是一个关键字,然后后面是相应数据, 所以哥哥是这么想的, 比如要读"AB2345"这个关键字对应行的内容, 那首先用变量或者宏定义定义下来, 然后从文件开头开始, 一个字符一个字符的扫描, 对每一行的开始的6个字符组成的636f7079e799bee5baa6334关键字读出来跟"AB2345"这个关键字比较, 判断是否是想要读取的, 如果是, 那么通过ftell, fseek 两个函数分别得出当前指针的位置和适当移动指针的位置, 最后读取相应内容输出来!
详细代码如下:
#include <<a href="https://www.baidu.com/s?wd=stdio.h&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9uWK9uWfvPjbLP1ckmH6d0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHnvPHcznjRknHbvrjnzn1cd" target="_blank" class="baidu-highlight">stdio.h</a>>
#include <<a href="https://www.baidu.com/s?wd=stdlib.h&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9uWK9uWfvPjbLP1ckmH6d0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHnvPHcznjRknHbvrjnzn1cd" target="_blank" class="baidu-highlight">stdlib.h</a>>
#include <<a href="https://www.baidu.com/s?wd=string.h&tn=44039180_cpr&fenlei=mv6quAkxTZn0IZRqIHckPjm4nH00T1d9uWK9uWfvPjbLP1ckmH6d0ZwV5Hcvrjm3rH6sPfKWUMw85HfYnjn4nH6sgvPsT6KdThsqpZwYTjCEQLGCpyw9Uz4Bmy-bIi4WUvYETgN-TLwGUv3EnHnvPHcznjRknHbvrjnzn1cd" target="_blank" class="baidu-highlight">string.h</a>>
#define BUF_SIZE 1024
#define KEY "AB2345"
#define KEY_LEN 7
int main()
{
int ch = 0;
int first = 1;//开始时的标志,因为是一个字符一个字符的扫描
int flag = 0;//文件开头是不是所要读内容的标志
int count = 0;//遇到'\n'的个数
int pre_pos = 0, cur_pos = 0;//前一次和当前文件指针的位置
char buf[BUF_SIZE] = {0};
FILE *fp = NULL;
fp = fopen("test.txt", "r");
if (fp == NULL)
{
printf("Cann't open the file!\n");
exit(1);
}
else
{
while ((ch = fgetc(fp)) != EOF)
{
if (first)
{
//若要读取的内容在文件开头就有时
//移动指针到文件开头
fseek(fp, -1L, SEEK_CUR);
fgets(buf, KEY_LEN, fp);
if (strcmp(buf, KEY) == 0)
{
first = 0;
flag = 1;
continue;
}
else
{
first = 0;
}
}
if (ch == '\n')
{
count++;//遇到'\n'的个数
pre_pos = cur_pos;//上次遇到'\n'时文件指针的位置
cur_pos = ftell(fp);//当前遇到'\n'时文件指针的位置

//文件开头内容符合要求的就适当移动指针位置
//然后读取输出来
if (count == 1 && flag == 1)
{
fseek(fp, 0L, SEEK_SET);
memset(buf, 0, sizeof(buf));
fgets(buf, cur_pos - 1, fp);
printf("%s\n", buf);
}
//之后内容符合要求的就适当移动指针位置
//然后读取输出来
else
{
memset(buf, 0, sizeof(buf));
fgets(buf, KEY_LEN, fp);
if (strcmp(buf, KEY) == 0)
{
fseek(fp, (-1) * (KEY_LEN - 1), SEEK_CUR);
memset(buf, 0, sizeof(buf));
fgets(buf, cur_pos-1-pre_pos, fp);
printf("%s\n", buf);
}
}
}
}
}
fclose(fp);
return 0;

word里面是程序代码还是普通文字?
如果是代码 直接复制到VC软件里面,编译一下就可以得到cpp文件。
如果是普通文字,可以复制到VC里面但是肯定不识别。

  1. #include <stdio.h>

  2. #include <stdlib.h>

  3. #include <string.h>

  4. int main()

  5. {

  6.     char ch;

  7.     char buffer[1024];//缓冲区

  8.     int len = 0;

  9.     FILE *fp;

  10.     fp=fopen("word.txt","r");

  11.     if(fp==NULL)

  12.     {

  13.         printf("open file word.txt failed!\n");

  14.     }

  15.     while(!feof(fp))

  16.     {

  17.         ch=fgetc(fp);

  18.         buffer[len++] = ch;//放到缓冲区

  19.         if (ch == '\n'){

  20.             buffer[len] = '\0';

  21.             printf ("%s", buffer);

  22.             len=0;

  23.             sleep(3);

  24.          }//回车输出

  25.      }

  26.      if (len){buffer[len] = '\0';printf ("%s", buffer);}//如果最后没7a686964616fe4b893e5b19e334有回车,输出缓冲区内容

  27.      fclose(fp);

  28.      return 0;

  29. }

相关阅读

关键词不能为空
极力推荐

ppt怎么做_excel表格制作_office365_word文档_365办公网