Esempio n. 1
0
        /// <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()));
        }
Esempio n. 2
0
 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);
             }
         }
     }
 }
Esempio n. 3
0
 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);
             }
         }
     }
 }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        /// <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);
        }
Esempio n. 7
0
        /// <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));
                }
            }
        }