文件读取

来源:互联网 发布:mac os 壁纸 编辑:程序博客网 时间:2024/05/20 00:37

sprintf()
strcpy(buf, “”);
char buf1[]=”I”; char buf2[]=”you!”;
sprintf(buf, “%s love %s”, buf1, buf2);
puts(buf);
/output: I love you!/

定义句柄打开文件FILE
int fileLen = ftell(fp);
ftell()函数返回fp(流)当前的文件位置,如果发生错误返回-1.
fopen
fopen()函数打开由fname(文件名)指定的文件, 并返回一个关联该文件的流.如果发生错误, fopen()返回NULL. mode(方式)是用于决定文件的用途(例如 用于输入,输出,等等)
Mode(方式) 意义
“r” 打开一个用于读取的文本文件
“w” 创建一个用于写入的文本文件
“a” 附加到一个文本文件
“rb” 打开一个用于读取的二进制文件
“wb” 创建一个用于写入的二进制文件
“ab” 附加到一个二进制文件
“r+” 打开一个用于读/写的文本文件
“w+” 创建一个用于读/写的文本文件
“a+” 打开一个用于读/写的文本文件
“rb+” 打开一个用于读/写的二进制文件
“wb+” 创建一个用于读/写的二进制文件
“ab+” 打开一个用于读/写的二进制文件

fseek
函数fseek()为给出的流设置位置数据. origin的值应该是下列值其中之一(在stdio.h中定义):

名称 说明
SEEK_SET 从文件的开始处开始搜索
SEEK_CUR 从当前位置开始搜索
SEEK_END 从文件的结束处开始搜索

fread
函数fread()读取[num]个对象(每个对象大小为size(大小)指定的字节数),并把它们替换到由buffer(缓冲区)指定的数组. 数据来自给出的输入流. 函数的返回值是读取的内容数量…

fwrite
fwrite()函数从数组buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流. 返回值是已写的对象的数量.

fclose
关闭给出的文件流, 释放已关联到流的所有缓冲区

#include <cstring>#include <cstdio>#include <cstdlib>//fopen   fseek   fread   fwrite   fclose//void FileOptR(const char* fileName)//{//定义句柄FILE* fp,开辟了一个与文件之间的通道//  FILE* fp = fopen(fileName, "r");//read/write/bin//  char* buffer = (char*)malloc(128);//  memset(buffer,0,128);//  //输出的空间,单元的大小,单元的个数,文件句柄//  size_t n = fread(buffer, sizeof(char), 128, fp);//  n = fwrite(buffer,sizeof(char),128,fp);//  //EOF,SET,CUR//  fseek(fp, 20, SEEK_END);//  ftell()函数返回fp(流)当前的文件位置,如果发生错误返回-1.//  long len = ftell(fp);//  fclose关闭开始的通道;//  fclose(fp);//}void FileDemo(const char* strFileName,const char* p){    FILE* fp = fopen(strFileName ,"r");    FILE* po = fopen(p,"w");    if (fp == NULL)    {        printf("文件打开失败!\n");    }    //计算文件大小    fseek(fp, 0, SEEK_END);//从文件结束处搜索    //  ftell()函数返回fp(流)当前的文件位置,如果发生错误返回-1.    int fileLen = ftell(fp);//找到文件结束位置    fseek(fp,0,SEEK_SET);//从文件开始处开始搜索    char* buffer = (char*)malloc(fileLen + 1);    memset(buffer, 0, fileLen + 1);    //fread读取fp所指向的文件中的内容**储存**到buffer中    size_t len = fread(buffer, 1, fileLen, fp);//读取输入流中的函数返回值,替换到buffer中    if (len > 0)    {        printf("%s",buffer);    }       //fwrite  把buffer中的内容**写入**strlen(buffer)个内容到po所指向的文件中    size_t writeLen = fwrite(buffer, 1, strlen(buffer), po);//在文件中写入缓冲区的内容    if (writeLen > 0)    {        printf("%d ",writeLen);    }    free(buffer);    fclose(fp);}void main(){    const char cocosSetupFile[] = "C:\\Users\\mbdn\\Desktop\\新建文本文档.txt";    const char p[] = "C:\\Users\\mbdn\\Desktop\\fasf.txt";    FileDemo(cocosSetupFile, p);    system("pause");}

原代码

int getFileSize(FILE* fp){   // 计算文件大小    fseek(fp, 0, SEEK_END);    int fileLen = ftell(fp);    fseek(fp, 0, SEEK_SET);    return fileLen;}//打印void show(const char* buffer, int len){    int cnt = len / 16;    for (int ix = 0; ix< cnt; ++ix)    {        for (int iy = 0; iy < 16; ++iy)        {            printf("%02X ", buffer[ix * 16 + iy]);        }        printf("\n");    }}void fPartReadDemo(const char* strFileName){    FILE* fp = fopen(strFileName, "rb");    if (fp == NULL)    {        printf("文件打开失败!\n");        return;    }    const int BUF_SIZE = 1024;    int flen = getFileSize(fp);    char* buffer = (char*)malloc(BUF_SIZE);    memset(buffer, 0, BUF_SIZE);    for (;;)    {        int len= fread(buffer, 1, BUF_SIZE, fp);        flen -= len;        show(buffer, len);        if (len < BUF_SIZE)        {            break;        }    }}void fEofDemo(const char* strFileName){    FILE* fp = fopen(strFileName, "r");    if (fp == NULL)    {        printf("文件打开失败!\n");        return;    }    int outChar = 0;    while (outChar!= EOF)    {        outChar= fgetc(fp);        char ch = (char)outChar;        printf("%c ", outChar);    }    fclose(fp);}void FileDemo(const char* strFileName){    // 读文件    FILE* fp = fopen(strFileName, "ab+");    if (fp == NULL)        printf("文件打开失败!\n");    // 计算文件大小    fseek(fp, 0, SEEK_END);//从文件结束处开始搜索     int fileLen = ftell(fp);//ftell当前文件位置    fseek(fp, 0, SEEK_SET);//从文件开始处开始搜索     // 读文件    char* buffer = (char*)malloc(fileLen + 1);    memset(buffer, 0, fileLen + 1);    size_t len = fread(buffer, 1, fileLen-10, fp);    if (len > 0)    {        printf("[%d]读出内容为-> %s\n",len, buffer);    }    free(buffer);    // 写文件    const char szWriteBuffer[] = "helloworld!";    size_t writeLen = fwrite(szWriteBuffer, 1, strlen(szWriteBuffer), fp);    if (writeLen > 0)    {        printf("共写入 [%d] 个字节!\n", writeLen);    }    fclose(fp);}//int main()//{//  //const char fileName[] = "D:\\work\\cppCode\\FileDemo\\cocos2dx.txt";//  const char cocosSetupFile[] = "D:\\cocos_creator\\CocosCreator_v1.2.2_2016092001_setup.exe";//  //FileDemo(fileName);//  //fEofDemo(fileName);//  fPartReadDemo(cocosSetupFile);//  system("pause");//  return 0;//}