C语言的FILE流应用

今天遇到一个关于图片文件处理的问题,需要把已经保存的图片读取大小然后根据size判断是否需要把数据做二次处理,虽然的解决方案是在数据传下来的时候就进行判断,对数据进行处理,从而确保了图片的正常显示。但是,对于其中用到的FILE流我却不是很了解。

所以,这次针对FILE流,进行简单的了解,我通过代码来说明,。

#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
int main(){
   FILE *fp;
  fp = fopen("D:\\abc.txt", "w");      /*打开文件fopen(文件路径(包含文件名),操作类型);
操作类型: r:只读、w:只写、rb:以二进制打开、wb:以二进制写文件、a:续写、ab:以二进制续写
r+:可读可写的打开一个文件、w+:可读可写的创建一个文件、a+:可读可写的追加方式打开一个文件、后加b的都是以二进制形式进行操作*/
  string sFileContent("I'm abc.I want to be a better man!!");  /*这里是练习C++的string库所以头文件引用的是<string>*/
   char* cFileContent =new char[50];
  int stringLength = sFileContent.length();  //string类的求长度函数
  cout<<"stringLength:"<<stringLength<<endl;
   cout<<"sFileContent:"<<sFileContent<<endl;
   memcpy(cFileContent,sFileContent.c_str(),stringLength);  //将string类型转化成char型
   //cFileContent[stringLength] = '/0';          /*学习时,书上说c_str转化的字符串没有结束符,所以想增加结束符*/
  //cFileContent[stringLength+1] = '/0';
  cout<<"cFileContent:"<<cFileContent<<endl;
  fwrite(cFileContent,sizeof(char),stringLength+1,fp);  //将内容写进函数中
/*fwrite(写入内容,单个数据的大小,数据的数量,文件指针)*/
  fseek(fp,0,SEEK_END);              //跳转到文件尾,/*fseek(文件指针,位移量,跳转位置);用来 移动文件流的读写位置。跳转位置的值可以为SEEK_SET——从文件起始位置+位移量的位置开始读写、SEEK_CUR——从当前位置+位移量的位置开始读写文件、SEEK_END——从文件的结尾处+位移量的位置开始读写文件*/
   int fileSize = ftell(fp);  //ftell(文件指针);函数用于返回当前文件指针的位置距离文件起始位置的相对偏移量。
  cout<<fileSize<<endl;
  fclose(fp);      //关闭文件。记得有open必须有close函数,使用完不关闭可能丢失数据。
  fp = fopen("D:\\abc.txt", "r");
  if(fp == NULL){
      system("pause");
      return 0;
  }
  char buffer[50];
   memset(buffer, 0x00,sizeof(buffer));
   fread(buffer,sizeof(char),50,fp);  /*fread(接收指针,单个数据大小,数据量count,文件指针);读取文件中count个数据。*/
  cout<<buffer<<endl;
   fclose(fp);
   system("pause");
   return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要处理标准TS数据,你需要了解TS数据的结构和格式。TS数据是由一系列的188字节的数据包(Packet)组成的,每个数据包包含4字节的同步字节(Sync byte)、1字节的错误指示器(Error indicator)、1字节的有效负载指示器(Payload Unit Start Indicator)、1字节的传输优先级指示器(Transport Priority)、13位的PID(Packet Identifier)、2位的传输加扰控制位(Transport Scrambling Control)、2位的适配器域控制位(Adaptation Field Control)和4位的连续计数器(Continuity Counter)。 在C语言中,你可以使用文件操作相关的函数来读取TS数据文件,然后按照TS数据的结构和格式逐个数据包进行处理。你可以使用结构体来定义TS数据包的结构,然后使用指针来读取和修改每个数据包的各个字段。 以下是一个简单的示例代码,可以读取一个TS数据文件并输出其中每个数据包的PID值: ```c #include <stdio.h> #include <stdlib.h> typedef struct { unsigned char sync_byte; unsigned char error_indicator; unsigned char payload_unit_start_indicator; unsigned char transport_priority; unsigned short pid; unsigned char transport_scrambling_control; unsigned char adaptation_field_control; unsigned char continuity_counter; } TsPacket; int main(int argc, char *argv[]) { if (argc != 2) { printf("Usage: %s ts_file\n", argv[0]); return 1; } FILE *fp = fopen(argv[1], "rb"); if (fp == NULL) { printf("Cannot open file %s\n", argv[1]); return 1; } TsPacket packet; while (fread(&packet, sizeof(TsPacket), 1, fp) == 1) { unsigned short pid = packet.pid; printf("PID: %u\n", pid); } fclose(fp); return 0; } ``` 这段代码定义了一个TsPacket结构体,用来表示TS数据包的各个字段。在主函数中,首先检查命令行参数是否正确,然后打开TS数据文件,读取每个数据包,并输出其中的PID值。注意,这段代码没有进行任何错误检查和适配器域的处理,实际应用中需要根据具体情况进行完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值