将大文件组合在一起

时间:2016-08-20 15:46:49

标签: javascript unity3d

我的硬盘上有几个文件需要作为一个文件放在一起并写回硬盘。文件总数超过2GB,因此当我使用它们时会产生以下错误:" OutOfMemoryException:内存不足。"我认为我的代码只是占用太多内存。有没有其他想法?

   i=0;bt=new byte[0];
while(i>-1){
   if(i<10){txt="0"+i;}else{txt=""+i;}
   txt=dir+"/"+dstring+"/"+"part"+txt+".tdd";
   if(File.Exists(txt)){
         bt=bt+File.ReadAllBytes(txt);// <--error is here
         i++;}
         else{i=-1;}
 }
 print("saving"+bt.Length);
 File.WriteAllBytes(dir+"/"+dstring+"/"+dstring+".mp4",bt);

2 个答案:

答案 0 :(得分:0)

您正尝试将所有文​​件保留在RAM中。由于文件的总大小很大(正如您在问题中所说的那样),您应该这样做:

  • 步骤1)在所需位置创建一个空文件。
  • 步骤2)将每个文件的内容写入步骤1 ONE BY ONE 中创建的文件。

没有办法过分强调你必须逐个写文件而不是一次性写文件的事实。

答案 1 :(得分:0)

Darukayan是对的。另一个论坛上的某个人给了我一个代码示例来解决我的问题。以下是我最终使用的内容:

 function combine (){

 //----finds an indefinate amount of files named part00.ttd, part01.tdd,part03.tdd
 //----in a folder and combines them into one file

      var outStream = System.IO.File.OpenWrite(dir+"/"+dstring+"/"+dstring+".mp4");

       i=0; 
       while(i>-1){

       if(i<10){txt="0"+i;}else{txt=""+i;}

       txt=dir+"/"+dstring+"/"+"part"+txt+".tdd";

       if(File.Exists(txt)){

          var inStream = System.IO.File.OpenRead(txt);    
          var fileinfo = new System.IO.FileInfo(txt);
          var countread:int = fileinfo.Length;

          var filebytes:byte[]=new byte[countread];

              inStream.Read(filebytes, 0, countread);
              outStream.Write(filebytes, 0, countread);
              inStream.Close();

          i++;}else{i=-1;}

        }

       outStream.Close();
}