/// <summary> /// /// </summary> /// <param name="filename"> /// Format: /// ~\Filename.txt /// ~\Directory1\Directory2\Filename.txt /// ~/Filename.txt /// ~/Directory1/Directory2/Filename.txt /// </param> /// <returns></returns> public Stream GetFileStream(string filename) { var parstedFilename = ParseFilename(filename); if (!_entryNames.Contains(parstedFilename)) { string note = ""; var entryWithAnotherCasing = _entryNames .FirstOrDefault(en => en.Equals(parstedFilename, StringComparison.InvariantCultureIgnoreCase)); if (entryWithAnotherCasing != null) { note = $" There's another entry with different casing '{entryWithAnotherCasing}'."; } throw new ArgumentException($"The file '{filename}' does not exist in the zip." + note); } var zipArchive = new ZipArchive(C1File.Open(ZipFilename, FileMode.Open, FileAccess.Read)); var entryPath = filename.Substring(2).Replace('\\', '/'); var entry = zipArchive.GetEntry(entryPath); if (entry == null) { zipArchive.Dispose(); throw new InvalidOperationException($"Entry '{entryPath}' not found"); } return(new StreamWrapper(entry.Open(), () => zipArchive.Dispose())); }
private void Initialize() { using (var fileStream = C1File.Open(ZipFilename, FileMode.Open, FileAccess.Read)) { using (var zipArchive = new ZipArchive(fileStream)) { foreach (var entry in zipArchive.Entries) { _entryNames.Add(entry.FullName); } } } }
private void Initialize() { using (C1FileStream fileStream = C1File.Open(this.ZipFilename, FileMode.Open, FileAccess.Read)) { using (var zipInputStream = new ZipInputStream(fileStream)) { ZipEntry zipEntry; while ((zipEntry = zipInputStream.GetNextEntry()) != null) { _existingFilenamesInZip.Add(zipEntry.Name, zipEntry); } } } }
private void Initialize() { using (var fileStream = C1File.Open(ZipFilename, FileMode.Open, FileAccess.Read)) { using (var zipArchive = new ZipArchive(fileStream)) { foreach (var entry in zipArchive.Entries) { var normalizedEntryPath = NormalizePathDelimiters(entry.FullName); _denormalizedEntryNames[normalizedEntryPath] = entry.FullName; _entryNames.Add(normalizedEntryPath); } } } }
public List <T> AddNew <T>(IEnumerable <T> datas) where T : class, IData { List <T> result = new List <T>(); foreach (IData data in datas) { if (data == null) { throw new ArgumentException("Data in list to add must be non-null"); } CheckInterface(typeof(T)); } foreach (IData data in datas) { if (typeof(T) == typeof(IMediaFile)) { IMediaFile file = (IMediaFile)data; string fullPath = Path.Combine(Path.Combine(_rootDir, file.FolderPath.Remove(0, 1)), file.FileName); using (Stream readStream = file.GetReadStream()) { using (Stream writeStream = C1File.Open(fullPath, FileMode.CreateNew)) { readStream.CopyTo(writeStream); } } result.Add(CreateFile(fullPath) as T); } else if (typeof(T) == typeof(IMediaFileFolder)) { IMediaFileFolder folder = (IMediaFileFolder)data; string fullPath = Path.Combine(_rootDir, folder.Path.Remove(0, 1)); C1Directory.CreateDirectory(fullPath); result.Add(CreateFolder(fullPath) as T); } } return(result); }
/// <summary> /// /// </summary> /// <param name="filename"> /// Format: /// ~\Filename.txt /// ~\Directory1\Directory2\Filename.txt /// ~/Filename.txt /// ~/Directory1/Directory2/Filename.txt /// </param> /// <returns></returns> public Stream GetFileStream(string filename) { string parstedFilename = ParseFilename(filename); if (!_existingFilenamesInZip.ContainsKey(parstedFilename)) { throw new ArgumentException(string.Format("The file {0} does not exist in the zip", filename)); } var zipInputStream = new ZipInputStream(C1File.Open(this.ZipFilename, FileMode.Open, FileAccess.Read)); ZipEntry zipEntry; while ((zipEntry = zipInputStream.GetNextEntry()) != null) { if (zipEntry.Name == parstedFilename) { break; } } return(zipInputStream); }
/// <summary> /// /// </summary> /// <param name="filename"> /// Format: /// ~\Filename.txt /// ~\Directory1\Directory2\Filename.txt /// ~/Filename.txt /// ~/Directory1/Directory2/Filename.txt /// </param> /// <returns></returns> public Stream GetFileStream(string filename) { var parstedFilename = ParseFilename(filename); if (!_entryNames.Contains(parstedFilename)) { throw new ArgumentException($"The file {filename} does not exist in the zip"); } var zipArchive = new ZipArchive(C1File.Open(ZipFilename, FileMode.Open, FileAccess.Read)); var entryPath = filename.Substring(2).Replace('\\', '/'); var entry = zipArchive.GetEntry(entryPath); if (entry == null) { zipArchive.Dispose(); throw new InvalidOperationException($"Entry '{entryPath}' not found"); } return(new StreamWrapper(entry.Open(), () => zipArchive.Dispose())); }
public void Update(IEnumerable <IData> datas) { foreach (IData data in datas) { if (data == null) { throw new ArgumentException("Data in list to update must be non-null"); } } foreach (IData data in datas) { MediaDataId dataId = data.DataSourceId.DataId as MediaDataId; if (dataId == null) { throw new ArgumentException("Invalid IData"); } if (dataId.MediaType == _fileType) { IMediaFile updatedFile = (IMediaFile)data; if (updatedFile.StoreId != this.Store.Id) { continue; } if (updatedFile.IsReadOnly) { throw new ArgumentException("Cannot update read only media file " + dataId.FileName); } if (updatedFile.FileName != dataId.FileName || updatedFile.FolderPath != dataId.Path) { string oldPos = GetAbsolutePath(dataId); string newPos = GetAbsolutePath(updatedFile); C1File.Move(oldPos, newPos); } using (Stream readStream = updatedFile.GetReadStream()) { using (Stream writeStream = C1File.Open(GetAbsolutePath(updatedFile), FileMode.Create)) { readStream.CopyTo(writeStream); } } } else { IMediaFileFolder updatedFolder = (IMediaFileFolder)data; if (updatedFolder.StoreId != this.Store.Id) { continue; } if (updatedFolder.IsReadOnly) { throw new ArgumentException("Cannot update read only media folder " + dataId.Path); } C1Directory.Move(GetAbsolutePath(dataId), GetAbsolutePath(updatedFolder)); } } }