Hi,
Ok, So I looked at it and to achive what you want to to you need to use Open method instead of OpenWrite.
I tried to implemented OpenWrite method similar to File.OpenWrite.
So its behaviour is the same as if you were to use regular files.
I modified your code and ran this but received the same result.
client.HostKeyReceived += (s, e) => { e.CanTrust = true; }; client.Connect();//SftpFileStream _fileStream = client.OpenWrite("final.txt");//var _fileStream = client.Open("final.txt", FileMode.OpenOrCreate | FileMode.Truncate); FileStream _fileStream = File.OpenWrite(@"final1.txt"); FileStream _localFileStream = File.Open(@"big.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);int transferred = 0;int totalToTransfer = 1495368;int lengthTransferred = 0;while (transferred < totalToTransfer) {byte[] readBytes = newbyte[65536]; lengthTransferred = _localFileStream.Read(readBytes, 0, 65536); _fileStream.Write(readBytes, 0, lengthTransferred); transferred += lengthTransferred; } _localFileStream.Close(); _fileStream.Close(); //_fileStream = client.OpenWrite("final.txt");//_fileStream = client.Open("final.txt", FileMode.OpenOrCreate | FileMode.Truncate);//_fileStream = File.Open(@"final1.txt", FileMode.OpenOrCreate); _fileStream = File.OpenWrite(@"final1.txt"); _localFileStream = File.Open(@"small.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); transferred = 0; totalToTransfer = 128832; lengthTransferred = 0;while (transferred < totalToTransfer) {byte[] readBytes = newbyte[65536]; lengthTransferred = _localFileStream.Read(readBytes, 0, 65536); _fileStream.Write(readBytes, 0, lengthTransferred); transferred += lengthTransferred; } _localFileStream.Close(); _fileStream.Close(); }
If you like, you can use Open method where you can explicitly specify to truncate a new file.
Please let me know if you have any more questions or suggestions.
Thanks,
Oleg
OpenWrite