/// <summary> /// Adds a disk file to the ISO image as a file. /// </summary> /// <param name="name">The name of the file on the ISO image.</param> /// <param name="sourcePath">The name of the file on disk.</param> /// <returns>The object representing this file.</returns> /// <remarks> /// The name is the full path to the file, for example: /// <example><code> /// builder.AddFile(@"DIRA\DIRB\FILE.TXT;1", @"C:\temp\tempfile.bin"); /// </code></example> /// <para>Note the version number at the end of the file name is optional, if not /// specified the default of 1 will be used.</para> /// </remarks> public BuildFileInfo AddFile(string name, string sourcePath) { string[] nameElements = name.Split(new char[] { '\\' }, StringSplitOptions.RemoveEmptyEntries); BuildDirectoryInfo dir = GetDirectory(nameElements, nameElements.Length - 1, true); BuildDirectoryMember existing; if (dir.TryGetMember(nameElements[nameElements.Length - 1], out existing)) { throw new IOException("File already exists"); } else { BuildFileInfo fi = new BuildFileInfo(nameElements[nameElements.Length - 1], dir, sourcePath); _files.Add(fi); dir.Add(fi); return(fi); } }
/// <summary> /// Adds a byte array to the ISO image as a file. /// </summary> /// <param name="name">The name of the file on the ISO image.</param> /// <param name="content">The contents of the file.</param> /// <returns>The object representing this file.</returns> /// <remarks> /// The name is the full path to the file, for example: /// <example><code> /// builder.AddFile(@"DIRA\DIRB\FILE.TXT;1", new byte[]{0,1,2}); /// </code></example> /// <para>Note the version number at the end of the file name is optional, if not /// specified the default of 1 will be used.</para> /// </remarks> public BuildFileInfo AddFile(string name, byte[] content) { string[] nameElements = name.Split('\\'); BuildDirectoryInfo dir = GetDirectory(nameElements, nameElements.Length - 1, true); BuildDirectoryMember existing; if (dir.TryGetMember(nameElements[nameElements.Length - 1], out existing)) { throw new IOException("File already exists"); } else { BuildFileInfo fi = new BuildFileInfo(nameElements[nameElements.Length - 1], dir, content); _files.Add(fi); dir.Add(fi); return(fi); } }
private BuildDirectoryInfo TryGetDirectory(string[] path, int pathLength, bool createMissing) { BuildDirectoryInfo focus = _rootDirectory; for (int i = 0; i < pathLength; ++i) { BuildDirectoryMember next; if (!focus.TryGetMember(path[i], out next)) { if (createMissing) { // This directory doesn't exist, create it... BuildDirectoryInfo di = new BuildDirectoryInfo(path[i], focus); focus.Add(di); _dirs.Add(di); focus = di; } else { return(null); } } else { BuildDirectoryInfo nextAsBuildDirectoryInfo = next as BuildDirectoryInfo; if (nextAsBuildDirectoryInfo == null) { throw new IOException("File with conflicting name exists"); } else { focus = nextAsBuildDirectoryInfo; } } } return(focus); }
/// <summary> /// Adds a stream to the ISO image as a file. /// </summary> /// <param name="name">The name of the file on the ISO image.</param> /// <param name="source">The contents of the file.</param> /// <returns>The object representing this file.</returns> /// <remarks> /// The name is the full path to the file, for example: /// <example><code> /// builder.AddFile(@"DIRA\DIRB\FILE.TXT;1", stream); /// </code></example> /// <para>Note the version number at the end of the file name is optional, if not /// specified the default of 1 will be used.</para> /// </remarks> public BuildFileInfo AddFile(string name, Stream source) { if (!source.CanSeek) { throw new ArgumentException("source doesn't support seeking", "source"); } string[] nameElements = name.Split('\\'); BuildDirectoryInfo dir = GetDirectory(nameElements, nameElements.Length - 1, true); BuildDirectoryMember existing; if (dir.TryGetMember(nameElements[nameElements.Length - 1], out existing)) { throw new IOException("File already exists"); } else { BuildFileInfo fi = new BuildFileInfo(nameElements[nameElements.Length - 1], dir, source); _files.Add(fi); dir.Add(fi); return(fi); } }