/// <summary> /// Create a tar entry with details obtained from <paramref name="fileName">file</paramref> /// </summary> public TarEntry CreateEntryFromFile(string fileName) { return(TarEntry.CreateEntryFromFile(fileName)); }
/// <summary> /// Get entries for all files present in this entries directory. /// If this entry doesnt represent a directory zero entries are returned. /// </summary> /// <returns> /// An array of TarEntry's for this entry's children. /// </returns> public TarEntry[] GetDirectoryEntries() { if ( (file == null) || !Directory.Exists(file)) { return new TarEntry[0]; } string[] list = Directory.GetFileSystemEntries(file); TarEntry[] result = new TarEntry[list.Length]; for (int i = 0; i < list.Length; ++i) { result[i] = TarEntry.CreateEntryFromFile(list[i]); } return result; }
/// <summary> /// Create a TarEntry based on named /// </summary> public TarEntry CreateEntry(string name) { return(TarEntry.CreateTarEntry(name)); }
/// <summary> /// Determine if the given entry is a descendant of this entry. /// Descendancy is determined by the name of the descendant /// starting with this entry's name. /// </summary> /// <param name = "toTest"> /// Entry to be checked as a descendent of this. /// </param> /// <returns> /// True if entry is a descendant of this. /// </returns> public bool IsDescendent(TarEntry toTest) { if ( toTest == null ) { throw new ArgumentNullException("toTest"); } return toTest.Name.StartsWith(Name); }
/// <summary> /// Construct an entry for a file. File is set to file, and the /// header is constructed from information from the file. /// </summary> /// <param name = "fileName"> /// The file that the entry represents. /// </param> public static TarEntry CreateEntryFromFile(string fileName) { TarEntry entry = new TarEntry(); entry.GetFileTarHeader(entry.header, fileName); return entry; }
/// <summary> /// Construct an entry with only a <paramref name="name">name</paramref>. /// This allows the programmer to construct the entry's header "by hand". /// </summary> public static TarEntry CreateTarEntry(string name) { TarEntry entry = new TarEntry(); TarEntry.NameTarHeader(entry.header, name); return entry; }
/// <summary> /// Clone this tar entry. /// </summary> /// <returns>Returns a clone of this entry.</returns> public object Clone() { TarEntry entry = new TarEntry(); entry.file = file; entry.header = (TarHeader)header.Clone(); entry.Name = Name; return entry; }
/// <summary> /// Put an entry on the output stream. This writes the entry's /// header and positions the output stream for writing /// the contents of the entry. Once this method is called, the /// stream is ready for calls to write() to write the entry's /// contents. Once the contents are written, closeEntry() /// <B>MUST</B> be called to ensure that all buffered data /// is completely written to the output stream. /// </summary> /// <param name="entry"> /// The TarEntry to be written to the archive. /// </param> public void PutNextEntry(TarEntry entry) { if ( entry == null ) { throw new ArgumentNullException("entry"); } if (entry.TarHeader.Name.Length >= TarHeader.NAMELEN) { TarHeader longHeader = new TarHeader(); longHeader.TypeFlag = TarHeader.LF_GNU_LONGNAME; longHeader.Name = longHeader.Name + "././@LongLink"; longHeader.UserId = 0; longHeader.GroupId = 0; longHeader.GroupName = ""; longHeader.UserName = ""; longHeader.LinkName = ""; longHeader.Size = entry.TarHeader.Name.Length; longHeader.WriteHeader(this.blockBuffer); this.buffer.WriteBlock(this.blockBuffer); // Add special long filename header block int nameCharIndex = 0; while (nameCharIndex < entry.TarHeader.Name.Length) { Array.Clear(blockBuffer, 0, blockBuffer.Length); TarHeader.GetAsciiBytes(entry.TarHeader.Name, nameCharIndex, this.blockBuffer, 0, TarBuffer.BlockSize); nameCharIndex += TarBuffer.BlockSize; buffer.WriteBlock(blockBuffer); } } entry.WriteEntryHeader(blockBuffer); buffer.WriteBlock(blockBuffer); currBytes = 0; currSize = entry.IsDirectory ? 0 : entry.Size; }