【问题标题】:combine large files together将大文件组合在一起
【发布时间】:2016-10-02 03:14:58
【问题描述】:

我的硬盘驱动器上有多个文件需要重新组合为一个文件并写回硬盘驱动器。这些文件总计超过 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);

【问题讨论】:

标签: javascript unity3d


【解决方案1】:

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

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

没有办法过分强调您必须一个一个地写入文件而不是一次写入所有文件。

【讨论】:

【解决方案2】:

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();
}

【讨论】:

    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多