我的硬盘上有几个文件需要作为一个文件放在一起并写回硬盘。文件总数超过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);
答案 0 :(得分:0)
您正尝试将所有文件保留在RAM中。由于文件的总大小很大(正如您在问题中所说的那样),您应该这样做:
没有办法过分强调你必须逐个写文件而不是一次性写文件的事实。
答案 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();
}