long bytesread = 0;
FileInfo f = new FileInfo(ficheiroaEnviar);
tamanhoFicheiroEnviar = f.Length;
byte[] chunkFicheiro;
while (!tudoFeito)
{
long oQueFalta = (tamanhoFicheiroEnviar - bytesread);
if (oQueFalta < tamanhoChunkPredefenido)
{
chunkFicheiro = new byte[tamanhoChunkPredefenido];
}
else
{
chunkFicheiro = new byte[oQueFalta];
}
using (FileStream fsSource = new FileStream(ficheiroaEnviar, FileMode.Open, FileAccess.Read))
{
lock (fsSource)
{
fsSource.Seek(bytesread, SeekOrigin.Begin);
fsSource.Read(chunkFicheiro, bytesread, chunkFicheiro.Length);
}
}
bytesread += chunkFicheiro.Length;
}
Bir 10GB dosya parçasını parça parçadan okuyabilmeyi isterim? Bir tamsayı maksimum sayısı 2,147,483,647 ve 10 GB’nin 10 000 000 000 baytı vardır. Büyük dosyalar ile çalışabilmesi için bir offset stream.read (diğer, int ofset, diğer) nasıl kullanabilirim?Stream.read'de bir offset kadar uzun bir süre nasıl geçilir?
(düzenleme soru veya dilerseniz başlık)
[FileStream.Seek] ilk parametresi (https://msdn.microsoft.com/en-us/library/system.io.filestream.seek (v = vs.110) .aspx) bir Int64'dür . Kodunuz çalışmalıdır (en azından Arayan arama ile ilgili her şey için) – Steve
Ben fsSource.Read (chunkFicheiro, bytesread, chunkFicheiro.Length) hakkında konuşuyorum; 'bytesread, eğer bir 10 GB dosyası kullanıyorum daha büyük olması gerekiyor daha sonra bir ** int ** – meme
Meme Kaynak akışında değil, _destination_ dizisinde kullanılacak ofset budur. Bir dizi, int'den büyük olamaz, MaxValue', bundan daha büyük bir ofset elde etmenin bir anlamı yoktur. –