madaxe2021
Member
- Joined
- Jun 25, 2021
- Messages
- 6
- Programming Experience
- 3-5
I found this on the web it does exactly what I want it to do but dependent on file size it will not report out at 100% in the action, I think it has something to do with the amount of bytes being read and this is not reflected in the progressCallback
anybody have any suggestions?
Thanks
Madaxe
anybody have any suggestions?
Thanks
Madaxe
CopyTo:
public static void CopyTo(this FileInfo file, FileInfo destination, Action<int> progressCallback)
{
const int bufferSize = 1024 * 1024;
byte[] buffer = new byte[bufferSize], buffer2 = new byte[bufferSize];
bool swap = false;
int progress = 0, reportedProgress = 0, read = 0;
long len = file.Length;
float flen = len;
Task writer = null;
using (var source = file.OpenRead())
using (var dest = destination.OpenWrite())
{
dest.SetLength(source.Length);
for (long size = 0; size < len; size += read)
{
if ((progress = ((int)((size / flen) * 100))) != reportedProgress)
progressCallback(reportedProgress = progress);
read = source.Read(swap ? buffer : buffer2, 0, bufferSize);
writer?.Wait();
writer = dest.WriteAsync(swap ? buffer : buffer2, 0, read);
swap = !swap;
}
writer?.Wait();
}
}