C语言 读写二进制文件

查找了比较多的资源, 发现没有办法把text 文件转成binary文件

仅作为记录,不过这个例子可以去除换行符。

#include <stdio.h>
#include <string.h>
#define N 255

int main()
{
 char a[N];
 FILE *fp1,*fp2;
 fp1=fopen("test_seq.fa","r");
 fp2=fopen("testSeq.dat","wb");

/* input text file and output ASCII file no line delimiter*/
 if (NULL == fp1){
    return -1;
 }
 while(!feof(fp1)){
    if(feof(fp1)){
        break;
    }

    fscanf(fp1,"%s", a);
    //fwrite(a, strlen(a),1,fp2);
    
    fwrite(&a, sizeof(char), strlen(a) ,fp2);

  }
 fclose(fp1);
 fclose(fp2);
 return 0;
}

编译后, 程序读入test _ seq. fa

输出是 testSeq. dat

#include <stdio.h>
#include <string.h>

int main(void){
    int len=2048;
    char filename[20];
    char buff[10000];
    char hit[5];      // str for find
    FILE *fd;
    int i,j,flag=0,over=0;
    int max,readed;
    int count=0;

    //strcpy(&filename[0] , "test_seq.fa");  // file name
    strcpy(&filename[0] , "testSeq.dat");  // file name
    strcpy(&hit[0] , "agag");                   // sequence
    buff[0]=0x0;
    buff[1]=0x0;

    // open file
    if((fd = fopen(&filename[0] , "rb"))==NULL){
        printf("Error : Can not open file %s\n",&filename[0]);
    }

    // read content
    while(over != 1){
        readed = fread(&buff[2] , 1 , len , fd);
        if(readed < len){
            over=1;
            max=readed;
        }else{
            max=len;
        }
        for(i=0;i<max;i++){
            for(j=0;j<4;j++){
                if(hit[j] != buff[i+j]){
                    flag=0;//
                    break;
                }else{
                    flag=1;//
                }
            }
            if(flag==1){
                count++;
                i+=j-1;
            }else{
                if(j==0){
                    i+=(j);
                }else{
                    i+=(j-1);
                }
            }
        }

    //
        buff[0]=buff[max];
        buff[1]=buff[max+1];
    }

    fclose(fd);
    printf("count:%d\n",count);
}

这个程序编译后 ,读入testSeq.dat , 统计其中的 agag 字符串的个数。

二进制文件读取 参考

https://stackoverflow.com/questions/15752546/binary-file-reading-writing-in-c

https://stackoverflow.com/questions/33252160/how-to-read-from-binary-file-to-a-text-file-in-c

https://www.codingunit.com/c-tutorial-binary-file-io

http://blog.csdn.net/bly1126/article/details/6020728

https://my.oschina.net/chuqixiaozhu/blog/386384

时间: 2024-10-10 02:58:44

C语言 读写二进制文件的相关文章

[转载]C语言实现二进制文件读写

转载于:https://blog.csdn.net/aresgod/article/details/1852321 我一直觉得二进制文件读写是个很容易的事,所以一直没在意,最近在写一个http客户端,实现文件下载的时候,发现总有问题,后来才发现是忘记写文件用二进制方式,惭愧的很啊. 然后,就在网上搜索了一下,发现通过C语言实现二进制文件读写的资料居然出奇的少,这让我很愤怒,因为虽然这东西很简单,但是对于初学者,往往会需要花很长的时间去弄,一旦明白,又发现花的时间很不值得,罢了,这里通过一个文件拷

[Matlab+C/C++] 读写二进制文件

introduction 由于Matlab操作简单.方便,它被应用于非常多领域:音频处理,图像处理,数值计算等.虽然MATLABeasy操作.但受限于他的语言解释机制.MATLAB的运行速度通常较低.C/C++一般被觉得是运行较为高效的高级程序设计语言. 假设结合MATLAB和C/C++.或许我们能够获得操作简便性和运行速度的折中.这样的结合的一般形式是:MATLAB负责绝大部分工作,C/C++负责一些关键部分的实现.其详细方法在我之前的博文中已经有所介绍. 在处理某些数据的时候,可能涉及到文件

C/C++读写二进制文件

C++读写二进制文件 最近在给android层提供支持,因此代码都是用标准库库函数写出来的,好多windows和第三方的库不能或者很难使用,下面有我在读写二进制文件时候的一些心得,也算是一种总结吧 1.读二进制信息 1 bool bRet = true; 2 std::ofstream fout(szDestFile, std::ios::binary | std::ios::app); 3 std::ifstream fin(szOrigFile, std::ios::binary); 4 5

C#读写二进制文件

原文 本文要介绍的C#本地读写二进制文件,二进制文件指保存在物理磁盘的一个文件.第一步:读写文件转成流对象.其实就是读写文件流 (FileStream对象,在System.IO命名空间中).File.FileInfo.FileStream这三个类可以将打开文件,并变成文件 流.下面是引用微软对File.FileInfo.FileStream的介绍System.IO.File类 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象.System.IO.File

C#本地读写二进制文件

本文要介绍的C#本地读写二进制文件,二进制文件指保存在物理磁盘的一个文件. 第一步:读写文件转成流对象.其实就是读写文件流 (FileStream对象,在System.IO命名空间中).File.FileInfo.FileStream这三个类可以将打开文件,并变成文件 流.下面是引用微软对File.FileInfo.FileStream的介绍System.IO.File类 提供用于创建.复制.删除.移动和打开文件的静态方法,并协助创建 FileStream 对象.System.IO.FileIn

R语言读写中文编码方式

最近遇到一个很头疼的事,就是 R语言读写中文编码方式.在网上找到了一篇博文,谢谢博主的精彩分享,让我很快解决了问题,在此也分享一下 R语言读写数据的方法很多,这里主要是我在使用read.csv/read.table和write.csv/write.table时遇到的一些中文格式编码的问题.常见的中文编码方式两种:GBK(GB2312)和UTF-8.     Windows系统下: read.csv()和read.table()方法不指定文件格式时,默认读取的文件是GBK格式.Rstudio里面有

【转】C++读写二进制文件

原文网址:http://blog.csdn.net/lightlater/article/details/6364931 摘要: 使用C++读写二进制文件,在开发中操作的比较频繁,今天有幸找到一篇文章,遂进行了一些试验,并进行了部分的总结. 使用C++操作文件,是研发过程中比较频繁的,因此进行必要的总结和封装还是十分有用的.今天在网上找到一篇,遂进行了部分的试验,以记之,备后用. 本文读写文件均使用文件流进行操作,主要使用的类是ifstream, ofstream, 使用时,请务必包含文件fst

C语言中二进制文件和文本文件的区别

所有的信息在内存中都是以二进制的形式进行存储的,这说明了二进制文件和文本文件不是在硬件上进行区分的. 二进制和文本文件因为操作系统的不同而不同,毕竟不同的人实现同一问题的思路也不是完全一样的嘛,首先说一下比较简单的那个:在Linux环境中,二进制文件和文本文件不进行区分.也就是说这两种方式在Linux操作系统下的实现机制是一样的:在OS X下面,太高大上了,用不到,所以也不关心:在Windows下面,二进制和文本文件是有区别的,下面就主要说明一下两者在Windows环境下的区别以及对应的文件操作

windows API读写二进制文件

其实,如果你学习过C语言的话,直接用 stdio.h 中函数是最简单的,也就是使用 fopen( "xxxx.xxx", "rb" ); 然后再调用 fread/fwrite; 关闭时调用 fclose 就可以了. 如果使用 Windows Native API 中的 CreateFile, 是不需要区分什么二进制不二进制的,只要此函数的返回值不是 INVALID_HANDLE_VALUE, 就可以继续使用 ReadFile/WriteFile 来进行读写,最后再用