Может ли метод Stream.CopyTo () сохранить потоки не полностью?

У меня есть сервис WCF, который позволяет мне загружать файлы кусками. Что мне интересно, так это то, что этот код может привести к тому, что загруженный поток будет добавлен лишь частично к целевому потоку в любом случае?

У меня есть свои журналы, которые показывают мне, что все отправленные потоки имеют размер 512000 байт (который я установил на стороне клиента), и я уже отправил 6 фрагментов из 9 фрагментов. Но на сервере размер файла составляет 2634325. Это означает, что последний отправленный кусок (6-й) сохранен не полностью.

Что может быть причиной такого поведения? Что я должен сделать, чтобы избежать этого?

Или это абсолютно безопасно, и я должен искать ошибку в другом месте?

public void UploadChunk ( RemoteFileChunk file )
{
    /// this file is not touched by anyone else
    var uploadPath = @"C:\some path\some.file";

    using ( var targetStream = new FileStream(uploadPath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None) )
    { 
        if ( targetStream.Length == file.ChunkNumber * Helper.ChunkSize )
        {
            /// ---- streaming operation is here ----
            targetStream.Position = targetStream.Length;
            file.Stream.CopyTo(targetStream);
            file.Stream.Close();
            /// -------------------------------------
        }
        else throw new FaultException<DataIntegrityException>(new DataIntegrityException
        {
            CurrentIndex = targetStream.Length,
            RequestedIndex = file.ChunkNumber * Helper.ChunkSize,
            Message = string.Format("{0}th chunk index requested when there already {1} chunks exist.", file.ChunkNumber, targetStream.Length / Helper.ChunkSize)
        });
    }
}

Ниже приведен фрагмент кода загрузки файла на стороне клиента:

var buffer = new byte[ChunkIndex != NumberOfChunks - 1 ? Helper.ChunkSize : LastPieceLen];

using ( var file = new FileStream(Info.FullName, FileMode.Open, FileAccess.Read, FileShare.None) )
{
    file.Position = (long)ChunkIndex * Helper.ChunkSize;
    file.Read(buffer, 0, buffer.Length);
}

var chunk = new MemoryStream(buffer);

chunk.Position = 0;
Service.StreamingEnd.UploadChunk(new RemoteFileChunk(FileId, CF.Id, VersionDate, ChunkIndex, chunk.Length, Sessions.Get(), chunk));

Ответы на вопрос(1)

Ваш ответ на вопрос