public NewFileEventArgs(RARFileInfo fileInfo) { this.fileInfo = fileInfo; }
/// <summary> /// Reads the next archive header and populates CurrentFile property data /// </summary> /// <returns></returns> public bool ReadHeader() { // Throw exception if archive not open if (this.archiveHandle == IntPtr.Zero) { throw new IOException("Archive is not open."); } // Initialize header struct this.header = new RARHeaderDataEx(); header.Initialize(); // Read next entry currentFile = null; int result = Unrar.RARReadHeaderEx(this.archiveHandle, ref this.header); // Check for error or end of archive if ((RarError)result == RarError.EndOfArchive) { return(false); } else if ((RarError)result == RarError.BadData) { throw new IOException("Archive data is corrupt."); } // Determine if new file if (((header.Flags & 0x01) != 0) && currentFile != null) { currentFile.ContinuedFromPrevious = true; } else { // New file, prepare header currentFile = new RARFileInfo(); currentFile.FileName = header.FileNameW.ToString(); if ((header.Flags & 0x02) != 0) { currentFile.ContinuedOnNext = true; } if (header.PackSizeHigh != 0) { currentFile.PackedSize = (header.PackSizeHigh * 0x100000000) + header.PackSize; } else { currentFile.PackedSize = header.PackSize; } if (header.UnpSizeHigh != 0) { currentFile.UnpackedSize = (header.UnpSizeHigh * 0x100000000) + header.UnpSize; } else { currentFile.UnpackedSize = header.UnpSize; } currentFile.HostOS = (int)header.HostOS; currentFile.FileCRC = header.FileCRC; currentFile.FileTime = FromMSDOSTime(header.FileTime); currentFile.VersionToUnpack = (int)header.UnpVer; currentFile.Method = (int)header.Method; currentFile.FileAttributes = (int)header.FileAttr; currentFile.BytesExtracted = 0; if ((header.Flags & 0x20) == 0x20) { currentFile.IsDirectory = true; } this.OnNewFile(); } // Return success return(true); }