private void Copy(Configuration.CopyInfo copyInfo, FileInfo sourceFileInfo, string destinationDirectory) { string sourceFile = sourceFileInfo.FullName; string destinationFile = Path.Combine(destinationDirectory, sourceFileInfo.Name); FileInfo destinationFileInfo = new FileInfo(destinationFile); // determine copying mode if (copyInfo.mode == Configuration.CopyInfoMode.CopyAlways) { destinationFileInfo.Attributes = FileAttributes.Archive; } else if (copyInfo.mode == Configuration.CopyInfoMode.CopyIfNewer) { if (File.Exists(destinationFile)) { if (IsEqual(sourceFileInfo, destinationFileInfo)) { return; } destinationFileInfo.Attributes = FileAttributes.Archive; } } else { throw new CodeGeneratorException(ErrorCode.InvalidCopyMode); } // copy and synchronize file attributes File.Copy(sourceFile, destinationFile, true); destinationFileInfo.Attributes = sourceFileInfo.Attributes; }
private void Copy(Configuration.CopyInfo copyInfo) { // source string sourceDirectory = GetSourceDirectory(copyInfo, true); string sourcePattern = GetSourcePattern(copyInfo, true); // target string targetDirectory = Path.Combine(_configuration.TargetRoot, copyInfo.target); targetDirectory = Replacer.Replace(_configuration.ProjectReplaceInfos, targetDirectory); // ensure target directory if (!Directory.Exists(targetDirectory)) { Directory.CreateDirectory(targetDirectory); } // copy DirectoryInfo directoryInfo = new DirectoryInfo(sourceDirectory); FileSystemInfo[] fileSysInfos = directoryInfo.GetFileSystemInfos(sourcePattern); for (int i = 0; i < fileSysInfos.Length; i++) { FileInfo fileInfo = fileSysInfos[i] as FileInfo; if (fileInfo != null) { Copy(copyInfo, fileInfo, targetDirectory); } else { if (copyInfo.recursive) { // source string sourceDirectoryRecursive = GetSourceDirectory(copyInfo, false); string sourcePatternRecursive = GetSourcePattern(copyInfo, false); // target string targetRecursive = Replacer.Replace(_configuration.ProjectReplaceInfos, copyInfo.target); DirectoryInfo directoryInfoRecursive = fileSysInfos[i] as DirectoryInfo; // prepate for recursion Configuration.CopyInfo copyInfoRecursive = new Configuration.CopyInfo(); copyInfoRecursive.mode = copyInfo.mode; copyInfoRecursive.recursive = copyInfo.recursive; copyInfoRecursive.source = Path.Combine(sourceDirectoryRecursive, directoryInfoRecursive.Name) + "\\" + sourcePatternRecursive; copyInfoRecursive.target = Path.Combine(targetRecursive, directoryInfoRecursive.Name); // recursion Copy(copyInfoRecursive); } } } }
private string GetSourcePattern(Configuration.CopyInfo copyInfo, bool combine) { string source = (combine) ? Path.Combine(_configuration.TemplateRoot, copyInfo.source) : copyInfo.source; int index = source.LastIndexOf('\\'); if (index == -1) { return(source); } else { return(source.Substring(index + 1, source.Length - index - 1)); } }
private string GetSourceDirectory(Configuration.CopyInfo copyInfo, bool combine) { string source = (combine) ? Path.Combine(_configuration.TemplateRoot, copyInfo.source) : copyInfo.source; int index = source.LastIndexOf('\\'); if (index == -1) { return(@".\"); } else { return(source.Substring(0, index)); } }