private static void AddDirectoryFromSource(TempFileSystem fs, string src, string dest, TempFeature fsFeat, bool includeSubDirectories) { var files = Directory.GetFiles(src); foreach (var fi in files) { fs.AddFileOrUpdateFeatures(dest, fi, fsFeat); } if (includeSubDirectories) { var folders = Directory.GetDirectories(src); foreach (var fd in folders) { var destname = dest + "\\" + Path.GetFileName(fd); AddDirectoryFromSource(fs, fd, destname, fsFeat, includeSubDirectories); } } }
public static TempFileSystem ConvertManifestToFileSystem(IEnumerable <Feature> features) { var fs = new TempFileSystem(); fs.InitializeShortcutFolders(VariableConverter.VarToWixId.Keys); foreach (var feat in features) { var fsFeat = fs.AddFeature(feat.title, feat.description); foreach (var ci in feat.copyinfo) { var src = ci.source; src = src.CleanFilePath(); var srcParts = src.CleanAndSplitFilePath().ToList(); if (srcParts.None()) { throw new Exception("No source found! " + src); } //if the first part of the file path isn't a drive letter and isn't in our special folder list, assume they mean relative to the current path. if (!srcParts.First().IsDriveLetter() && !VariableConverter.VarToWixId.ContainsKey(srcParts.First())) { var currFolder = SimpleWix.CurrentFolder; try { if (srcParts.First() == "..") { int startIndex = 0; for (int i = 0; i < srcParts.Count; i++) { if (srcParts[i] == "..") { currFolder = Path.GetDirectoryName(currFolder); } else { startIndex = i; break; } } srcParts.RemoveRange(0, startIndex); src = ""; foreach (var part in srcParts) { src = Path.Combine(src, part); } } } catch (Exception e) { Console.WriteLine(new Exception("There was an error navigating up folders!", e)); } src = Path.Combine(currFolder, src); } var dest = ci.destination; //expand vars here if (File.Exists(src)) { fs.AddFileOrUpdateFeatures(dest, src, fsFeat); } else if (Directory.Exists(src)) { AddDirectoryFromSource(fs, src, dest, fsFeat, ci.includesubfolders); } else { throw new Exception("Path does not exist: " + src); } } } return(fs); }