菜鸟请教,如何使用WriteFile()、ReadFile()、CreateFile()等编写一个将两个以上文件合并问一个文件的程序?

时间:2022-08-04 21:39:08
如何使用WriteFile()、ReadFile()、CreateFile()编写一个将两个以上文件合并问一个文件的程序?

6 个解决方案

#1


打开两个文件,目标文件移动到最后,然后读第一个文件——写入目标文件。

#2


creatfile(0)->openfile(file1)->readfile1->writefile 1 to 0 ->close file1;
->readfile2->writefile 2 to 0 using append->close file2;...
追加写入文件

#3


费那事儿!
system("cmd /c copy /b file1+file2+file3 file123 >NUL 2>NUL");

计算机组成原理→ DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

#4


谢谢了,思路我倒是明白,就是不会编写,希望能够有比较完整的代码

#5




 CFile *readfile,*writefile;
  CString ininame,inidir;
  //获得分割文件时生成的INI文件
  GetDlgItem(IDC_EDINI)->GetWindowText(ininame);
  //获得INI文件所在目录
  inidir=FindPath(ininame);
  //获得分割前文件信息包括最后块序号,文件名(无扩展名),扩展名,块大小
  char pagenum[128],pagename[128],pageext[128],size[128];
  ::GetPrivateProfileString("FilePartition","name","",pagename,128,ininame);
  ::GetPrivateProfileString("FilePartition","ext","",pageext,128,ininame);
  ::GetPrivateProfileString("FilePartition","pageend","",pagenum,128,ininame);
  ::GetPrivateProfileString("FilePartition","size","",size,128,ininame);
  int pagecount=atoi(pagenum);
  CString desname; //合并后文件保存路径
  CString srcname; //合并的文件的路径
  desname.Format("%s\\%s.%s",inidir,pagename,pageext);
  HANDLE hfile=::CreateFile(desname,GENERIC_WRITE|GENERIC_WRITE,
    0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  CloseHandle(hfile);
  writefile=new CFile(desname,CFile::modeWrite);
  for(int i=1;i<pagecount;i++)
  {
   srcname.Format("%s\\%spart%d_%s.dat",inidir,pagename,i,pageext);
   readfile=new CFile(srcname,CFile::modeRead);
   DWORD filelen=readfile->GetLength();
   BYTE *b=new BYTE[filelen];
   readfile->Read(b,filelen);
   writefile->Write(b,filelen);
   readfile->Close();
   delete b;
  }
  writefile->Close();
  delete writefile;
  delete readfile;



LZ参考:

http://blog.sina.com.cn/s/blog_4171e80d0100k94n.html

#6


引用 3 楼 zhao4zhong1 的回复:
费那事儿!
C/C++ code
system("cmd /c copy /b file1+file2+file3 file123 >NUL 2>NUL");

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……


赞一个~

#1


打开两个文件,目标文件移动到最后,然后读第一个文件——写入目标文件。

#2


creatfile(0)->openfile(file1)->readfile1->writefile 1 to 0 ->close file1;
->readfile2->writefile 2 to 0 using append->close file2;...
追加写入文件

#3


费那事儿!
system("cmd /c copy /b file1+file2+file3 file123 >NUL 2>NUL");

计算机组成原理→ DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

#4


谢谢了,思路我倒是明白,就是不会编写,希望能够有比较完整的代码

#5




 CFile *readfile,*writefile;
  CString ininame,inidir;
  //获得分割文件时生成的INI文件
  GetDlgItem(IDC_EDINI)->GetWindowText(ininame);
  //获得INI文件所在目录
  inidir=FindPath(ininame);
  //获得分割前文件信息包括最后块序号,文件名(无扩展名),扩展名,块大小
  char pagenum[128],pagename[128],pageext[128],size[128];
  ::GetPrivateProfileString("FilePartition","name","",pagename,128,ininame);
  ::GetPrivateProfileString("FilePartition","ext","",pageext,128,ininame);
  ::GetPrivateProfileString("FilePartition","pageend","",pagenum,128,ininame);
  ::GetPrivateProfileString("FilePartition","size","",size,128,ininame);
  int pagecount=atoi(pagenum);
  CString desname; //合并后文件保存路径
  CString srcname; //合并的文件的路径
  desname.Format("%s\\%s.%s",inidir,pagename,pageext);
  HANDLE hfile=::CreateFile(desname,GENERIC_WRITE|GENERIC_WRITE,
    0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
  CloseHandle(hfile);
  writefile=new CFile(desname,CFile::modeWrite);
  for(int i=1;i<pagecount;i++)
  {
   srcname.Format("%s\\%spart%d_%s.dat",inidir,pagename,i,pageext);
   readfile=new CFile(srcname,CFile::modeRead);
   DWORD filelen=readfile->GetLength();
   BYTE *b=new BYTE[filelen];
   readfile->Read(b,filelen);
   writefile->Write(b,filelen);
   readfile->Close();
   delete b;
  }
  writefile->Close();
  delete writefile;
  delete readfile;



LZ参考:

http://blog.sina.com.cn/s/blog_4171e80d0100k94n.html

#6


引用 3 楼 zhao4zhong1 的回复:
费那事儿!
C/C++ code
system("cmd /c copy /b file1+file2+file3 file123 >NUL 2>NUL");

计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……


赞一个~