您的位置:首页 > 其它

怎么将一个整个文件一次读到内存,然后循环从内存中读取1024字节,写入新的文件(或socket发送出去)

2014-04-03 13:20 656 查看

怎么将一个整个文件一次读到内存,然后循环从内存中读取1024字节,写入新的文件(或socket发送出去)

如何将一个整个文件一次读到内存,然后循环从内存中读取1024字节,写入新的文件(或socket发送出去)

申请内存,并读入文件如下:

CString srcPath = "D:\\My Documents\\My Pictures\\新建文件夹\\知知.bmp"; //源文件

CString descPath = "D:\\My Documents\\My Pictures\\新建文件夹\\new知知.bmp";//新生成的文件

CFile descFile(m_descPath, CFile::modeCreate | CFile::modeWrite);//打开目标文件,做好准备写入

CFile srcFile;

if( !srcFile.Open( srcPath , CFile::modeRead) ){

printf("打开源文件错误");

}

int srcFileLen = srcFile.GetLength(); //源文件长度

char* bmpBuffer = new char[srcFileLen + 1];//申请大块内存

if(!bmpBuffer ){printf("内存申请失败");}

if(srcFile.Read(bmpBuffer,srcFileLen) != srcFileLen){//将文件读到内存

printf("文件读取失败");

}

descFile.Write(bmpBuffer, srcFileLen);

descFile.close();

///////////////////////////////////////////////////////////////////////////////////

以上程序的功能是将整个文件读入内存,然后再写入一个新的文件,

///////////////////////////////////////////////////////////////////////////////////

现在需要修改:整个文件已加载到内存,循环读取内存,每次读1024个字节,

保存到新文件中(或是socket发送出去)

///////////////////////////////////////////////////////////////////////////////////

memcpy函数参数介绍:

memcpy(char * desc, char * src, int count)

desc:目标地址,

src:源地址,

count:从src中读取的字节数,

但这个函数返回的是指向desc的指针,我需要返回的是src第1024以后的指针,

。。。。。。

------解决方案--------------------

for (int i = 0; i< srcFileLen; i+=1024)

{

memcpy(buf, bmpBuffer + i, 1024);

//然后将buf写入文件

}

------解决方案--------------------

C Code

已调试,可运行,不知能否满足要求!!!!

#include <windows.h>

#include <stdio.h>

#define MAX_NUM 260

#define READ_NUM 1024

int main()

{

char FileName[MAX_NUM] = "temp.txt ";

char Buffer[READ_NUM] = " ";

FILE* Source = NULL;

FILE* Dest = NULL;

int i = 0;

size_t SzByte = 0; //all bytes of File

size_t SzRead = 0; //read bytes from File

Source = fopen(FileName, "r+b ");

Dest = fopen( "q.txt ", "w+b ");

if((Source == NULL) || (Dest == NULL))

{

printf( "Open file failed \n ");

}

fseek(Source, 0, SEEK_END);

SzByte = ftell(Source);

fseek(Source,0,SEEK_SET);

i = SzByte/READ_NUM;

for(int j=0;j <(i+1);j++)

{

SzRead = fread(Buffer,sizeof(char),READ_NUM,Source);

if(SzRead == 0)

{

printf( "read file failed\n ");

}

fprintf(Dest, "%s ",Buffer);

}

fclose(Source);

fclose(Dest);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐