如果有人在我之後有興趣,這裏是我的發現工作:
for (int i = 0; i < reverseImageFiles.Length; i++)
{
string curBMP = reverseImageFiles[i];
using(Stream inStream = File.OpenRead(curBMP))
using (Stream writeStream = new FileStream(outputBMP,FileMode.Append,FileAccess.Write,FileShare.None))
{
BinaryReader reader = new BinaryReader(inStream);
BinaryWriter writer = new BinaryWriter(writeStream);
byte[] buffer = new Byte[134217728];
int bytesRead;
int totalBytes = 0;
while ((bytesRead = inStream.Read(buffer, 0, 134217728)) > 0)
{
totalBytes += bytesRead;
if (totalBytes <= 134217729) //if it's the first round of reading to the buffer, you need to get rid of 54-byte BMP header
{
writeStream.Write(buffer, 54, bytesRead - 54);
}
else
{
writeStream.Write(buffer, 0, bytesRead);
}
}
}
}
兩件事情:
專門爲BMP的,我發現,你需要扭轉的文件列表追加時。例如,如果要附加的三個文件標記爲001.bmp,002.bmp,003.bmp,其中001.bmp應位於最上方,則您需要實際從003.bmp開始並逐漸減少。顯然BMP是向後編碼的。
正如您所看到的,我使用了一個128MB緩衝區。如果我想降低硬盤驅動器的搜索速度,使用不同的大小會更好嗎?我的驅動器最近進行了整理。感謝所有的幫助!
>如何讀取每個BMP並將它們追加到最終文件而不使用我所有的內存? 流式傳輸文件。 – Romoku 2013-03-27 12:55:29