internal static void Go() { string source, destination; source = @"D:\tmp\1.txt"; destination = @"D:\tmp\2.txt"; //File.Open(source, FileMode.Open, FileAccess.Read); if (IsFileInUse(source)) { Console.WriteLine("File is use: {0}", source); return; } if (IsFileInUse(destination)) { Console.WriteLine("File is use: {0}", destination); return; } File.Copy(source, destination, true); Console.WriteLine("Done"); } static internal bool IsFileInUse(string filename) { if (!File.Exists(filename)) return false; bool inUse; try { using (File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.None)) { inUse = false; } } catch (IOException ) { inUse = true; } return inUse; } }