To do the file copies I simply use System.IO.File.Copy. Which command does the .NET Framework execute here?
It uses the CopyFile routine in the windows API.
Will the files be copied twice from my server to the target server?
No, your example first copies from A to B and then from B to C. This is really inefficient because the second copy operation reads the file data back from B to A before it sends it to C. You should instead have two copy operations from "c:\test.txt" to two different destinations.
edit: I looked into it and it turns out that the file will not be read back to the local machine if you are copying within the same remote shared folder. So in your example where you are copying within the dir1
share, there is no problem. But as soon as you copy from one share to another, this optimization is lost and the file will be read to local memory during a copy operation.