объединять большие файлы вместе

javascript unity3d

62 просмотра

2 ответа

У меня есть несколько файлов на жестком диске, которые необходимо собрать обратно в один файл и записать обратно на жесткий диск. общее количество файлов превышает 2 ГБ, поэтому при работе с ними возникает следующая ошибка: «OutOfMemoryException: Out of memory». я думаю, что мой код просто занимает слишком много памяти. У кого-нибудь есть другие идеи?

   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);
Автор: TaterKing Источник Размещён: 08.11.2019 11:31

Ответы (2)


0 плюса

Вы пытаетесь сохранить все файлы в оперативной памяти одновременно. Так как общий размер файлов огромен (как вы сказали в своем вопросе), вы должны сделать это вместо этого:

  • Шаг 1) Создайте пустой файл в нужном месте.
  • Шаг 2) Запишите содержимое каждого файла в файл, созданный на шаге 1 ONE BY ONE .

Нет никакого способа переоценить тот факт, что вы ДОЛЖНЫ писать файлы один за другим, а не все сразу.

Автор: dorukayhan Размещён: 20.08.2016 05:55

0 плюса

Дарукаян прав. Кто-то на другом форуме дал мне пример кода, чтобы исправить мою проблему. Вот что я в итоге использовал:

 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();
}
Автор: TaterKing Размещён: 23.09.2016 11:04
Вопросы из категории :
32x32