/// <summary> /// raises the FileDeleted event. /// </summary> /// <param name="file"></param> protected virtual void OnFileDeleted(ArchiveFile file) { if (FileDeleted != null) { FileDeleted(this, new FileEventArgs() { File = file }); } }
/// <summary> /// extract an archive file from the source stream. /// </summary> /// <param name="source"></param> /// <param name="index"></param> /// <returns></returns> public static ArchiveFile ExtractArchive(Stream source, ArchiveFileIndex index) { // seek to the start index of the file: source.Seek(index.FileStartIndex, SeekOrigin.Begin); // read the block of data: byte[] archiveData = ReadBuffer(source, index.FileLength); // deserialize the file: return(ArchiveFile.FromByteArray(archiveData)); }
/// <summary> /// adds a new file to the end of the archive. /// </summary> /// <param name="file"></param> public void AddFile(ArchiveFile file) { // add the specified file to this archive. List <ArchiveFile> fileList = new List <ArchiveFile>(); fileList.Add(file); using (Stream s = GetStream()) { AddData(fileList, s, _index); } }
/// <summary> /// add a file from disk into the specified folder of the archive. /// </summary> /// <param name="sourceFileName">the source file path</param> /// <param name="destDir">the target directory in the archive.</param> /// <returns>the archive-file details.</returns> public ArchiveFile AddExistingFile(string sourceFileName, string destDir) { // create the archive file object: ArchiveFile file = new ArchiveFile(sourceFileName); // create the archive path: string path = destDir + "\\" + file.Name; // add into this this[path] = file; // return the file. return(file); }
/// <summary> /// add the archive file into the specific directory with the specific name. /// </summary> /// <param name="fileName"></param> /// <param name="value"></param> public void AddFile(String fileName, ArchiveFile value) { // extract the path and name of the file. string path = Path.GetDirectoryName(fileName); string name = Path.GetFileName(fileName); // the name and path and owner are modified to match: value.Path = path; value.Name = name; // does the path already exist? if (!_fileSystem.ContainsKey(path)) { // create the folder: _fileSystem.Add(path, new List <ArchiveFile>()); // raise the event; OnDirAdded(path); } // does the folder already contain the file? if (_fileSystem[path].Contains(value)) { // yes.. get the index of the file: int i = _fileSystem[path].IndexOf(value); // set the specific index to the input value: _fileSystem[path][i] = value; // now raise the file-updated event. OnFileUpdated(value); } else { // add the file. _fileSystem[path].Add(value); // raise the file added event: OnFileAdded(value); } }
public static void TestOpen() { // open the existing archive file: StreamingArchiveFile arc = new StreamingArchiveFile(@"C:\Temp\streamingArchive.arc"); // iterate the files in the archive: foreach (string fileName in arc.FileIndex.IndexedFileNames) { // write the name of the file Debug.Print("File: " + fileName); // extract the file: ArchiveFile file = arc.GetFile(fileName); // save it to disk: String tempFileName = Path.GetTempPath() + "\\" + file.Name; file.SaveAs(tempFileName); // open the file: Process.Start(tempFileName); } }
/// <summary> /// determine if the two archive files are equivalent. /// </summary> /// <param name="file"></param> /// <returns></returns> public bool Equals(ArchiveFile file) { return(file.Name == this.Name && file.Path == this.Path); }
/// <summary> /// determine if the two archive files are equivalent. /// </summary> /// <param name="file"></param> /// <returns></returns> public bool Equals(ArchiveFile file) { return (file.Name == this.Name && file.Path == this.Path); }
/// <summary> /// adds a new file to the end of the archive. /// </summary> /// <param name="file"></param> public void AddFile(ArchiveFile file) { // add the specified file to this archive. List<ArchiveFile> fileList = new List<ArchiveFile>(); fileList.Add(file); using (Stream s = GetStream()) { AddData(fileList, s, _index); } }
/// <summary> /// add the file using it's directory and name. /// </summary> /// <param name="value"></param> public void AddFile(ArchiveFile value) { AddFile(value.Path + "\\" + value.Name, value); }
/// <summary> /// raises the FileDeleted event. /// </summary> /// <param name="file"></param> protected virtual void OnFileDeleted(ArchiveFile file) { if (FileDeleted != null) FileDeleted(this, new FileEventArgs() { File = file }); }
/// <summary> /// add a file from disk into the specified folder of the archive. /// </summary> /// <param name="sourceFileName">the source file path</param> /// <param name="destDir">the target directory in the archive.</param> /// <returns>the archive-file details.</returns> public ArchiveFile AddExistingFile(string sourceFileName, string destDir) { // create the archive file object: ArchiveFile file = new ArchiveFile(sourceFileName); // create the archive path: string path = destDir + "\\" + file.Name; // add into this this[path] = file; // return the file. return file; }
/// <summary> /// add the archive file into the specific directory with the specific name. /// </summary> /// <param name="fileName"></param> /// <param name="value"></param> public void AddFile(String fileName, ArchiveFile value) { // extract the path and name of the file. string path = Path.GetDirectoryName(fileName); string name = Path.GetFileName(fileName); // the name and path and owner are modified to match: value.Path = path; value.Name = name; // does the path already exist? if (!_fileSystem.ContainsKey(path)) { // create the folder: _fileSystem.Add(path, new List<ArchiveFile>()); // raise the event; OnDirAdded(path); } // does the folder already contain the file? if (_fileSystem[path].Contains(value)) { // yes.. get the index of the file: int i = _fileSystem[path].IndexOf(value); // set the specific index to the input value: _fileSystem[path][i] = value; // now raise the file-updated event. OnFileUpdated(value); } else { // add the file. _fileSystem[path].Add(value); // raise the file added event: OnFileAdded(value); } }