//--// public static DirectoryInfo CreateDirectory(string path) { // path validation in Path.GetFullPath() path = Path.GetFullPath(path); /// According to MSDN, Directory.CreateDirectory on an existing /// directory is no-op. NativeIO.CreateDirectory(path); return(new DirectoryInfo(path)); }
private static void RecursiveCopyAndDelete(String sourceDirName, String destDirName) { String[] files; int filesCount, i; int relativePathIndex = sourceDirName.Length + 1; // relative path starts after the sourceDirName and a path seperator // We have to make sure no one else can modify it (for example, delete the directory and // create a file of the same name) while we're moving Object recordSrc = FileSystemManager.AddToOpenList(sourceDirName); try { // Make sure sourceDir is actually a directory if (!Exists(sourceDirName)) { throw new IOException("", (int)IOException.IOExceptionErrorCode.DirectoryNotFound); } // Make sure destDir does not yet exist if (Exists(destDirName)) { throw new IOException("", (int)IOException.IOExceptionErrorCode.PathAlreadyExists); } NativeIO.CreateDirectory(destDirName); files = Directory.GetFiles(sourceDirName); filesCount = files.Length; for (i = 0; i < filesCount; i++) { File.Copy(files[i], Path.Combine(destDirName, files[i].Substring(relativePathIndex)), false, true); } files = Directory.GetDirectories(sourceDirName); filesCount = files.Length; for (i = 0; i < filesCount; i++) { RecursiveCopyAndDelete(files[i], Path.Combine(destDirName, files[i].Substring(relativePathIndex))); } NativeIO.Delete(sourceDirName); } finally { FileSystemManager.RemoveFromOpenList(recordSrc); } }