コード例 #1
0
ファイル: FileCache.cs プロジェクト: gadfly/nofs
	public FileCache(LogManager log, IMethodFilter methodFilter, FileCacheManager manager, IFileObject file, int blockSize) {
		_log = log;
		_dirty = false;
		_manager = manager;
		_file = file;
		_blockSize = blockSize;
		_methodFilter = methodFilter;
	}
コード例 #2
0
        public SevenZipFileSystem(IInArchive archive, IFileName rootName, IFileObject parentLayer, FileSystemOptions fileSystemOptions)
            : base(rootName, parentLayer, fileSystemOptions)
        {
            this.archive = archive;

            if (parentLayer.FileSystem is LocalFileSystem || parentLayer.Content.Size > 1048576)
            {
                file = parentLayer.FileSystem.replicateFile(parentLayer, Selectors.SELECT_SELF);
            }
        }
コード例 #3
0
        public void GetEnumerator_Test()
        {
            IFileObject[] all    = new IFileObject[] { new PDFNumber(1), new PDFNumber(2), new PDFNumber(3) };
            PDFArray      target = new PDFArray(all);

            int index = 0;

            foreach (IFileObject found in target)
            {
                Assert.AreEqual(all[index], found);
                index++;
            }
        }
コード例 #4
0
        public void Count_Test()
        {
            IFileObject[] all      = new IFileObject[] { new PDFNumber(1), new PDFNumber(2), new PDFNumber(3) };
            PDFArray      target   = new PDFArray(all);
            int           expected = all.Length;
            int           actual   = target.Count;

            Assert.AreEqual(expected, actual, "PDFArray.Count returned the incorrect value");

            target.Add(new PDFNumber(4));
            expected += 1;
            actual    = target.Count;
            Assert.AreEqual(expected, actual, "PDFArray.Count returned the incorrect value");
        }
コード例 #5
0
ファイル: DalcFileObject.cs プロジェクト: ruo2012/nicnet
 public virtual void CopyFrom(IFileObject srcFile)
 {
     if (srcFile.Type == FileType.File)
     {
         using (Stream inputStream = srcFile.Content.GetStream(FileAccess.Read))
         {
             CopyFrom(inputStream);
         }
     }
     if (srcFile.Type == FileType.Folder)
     {
         CopyFrom(srcFile.GetChildren());
     }
 }
コード例 #6
0
        public static PDFDictionary ParseDictionary(string value, int offset, out int end)
        {
            AssertValidValue(value, offset + 1);
            if (value[offset] != DictionaryStartChar)
            {
                throw new PDFNativeParserException(CommonErrors.DictionaryDoesNotStartWithRequiredChar);
            }
            if (value[offset + 1] != DictionaryStartChar)
            {
                throw new PDFNativeParserException(CommonErrors.DictionaryDoesNotStartWithRequiredChar);
            }
            PDFDictionary dict = new PDFDictionary();

            offset += 2;
            while (offset < value.Length)
            {
                char c = value[offset];
                if (char.IsWhiteSpace(c))
                {
                    offset++;
                }
                else if (c == NameStartCharacter)
                {
                    PDFName name = ParseName(value, offset, out end);
                    offset = end;
                    IFileObject obj = InferAndParseNextObject(value, offset, out end);
                    dict[name] = obj;
                    offset     = end;
                }
                else if (c == DictionaryEndChar)
                {
                    if (value.Length > offset + 1 && value[offset + 1] == DictionaryEndChar)
                    {
                        offset += 2;
                        break;
                    }
                    else
                    {
                        throw new PDFNativeParserException(CommonErrors.DictionaryDoesNotEndWithRequiredChar);
                    }
                }
                else
                {
                    throw new PDFNativeParserException(CommonErrors.AllDictionaryKeysMustBePDFNames);
                }
            }
            end = offset;
            return(dict);
        }
コード例 #7
0
ファイル: MemoryFile.cs プロジェクト: ruo2012/nicnet
 public virtual void CreateFile()
 {
     if (Type == FileType.Imaginary)
     {
         string fileParentLocalFolder = Path.GetDirectoryName(Name);
         if (fileParentLocalFolder.Length > 0)
         {
             IFileObject parentFolder = MemoryFs.ResolveFile(fileParentLocalFolder);
             parentFolder.CreateFolder();
         }
     }
     _Type = FileType.File;
     Content.LastModifiedTime = DateTime.Now;
     Close();
 }
コード例 #8
0
 private IEnumerable <IOperation> UpdateFile(IFileObject file, IFileObject baseFile, IChange change, ISyncContext context)
 {
     if (change is ContentChange)
     {
         yield return(new CopyFileOperation(baseFile, file, context.ExecutionContext.ServiceContainer.Get <IFileSystem>(), context.ExecutionContext));
     }
     else if (change is NameCasingChange)
     {
         yield return(new RenameFileOperation(file, baseFile.Name, context.ExecutionContext.ServiceContainer.Get <IFileSystem>(), context.ExecutionContext));
     }
     else
     {
         throw new NotSupportedException();
     }
 }
コード例 #9
0
        private PDFObjectRef[] GetAllPages(PDFObjectRef pageTreeRef, PDFFile origFile)
        {
            IFileObject fo = origFile.GetContent(pageTreeRef);

            if (null == fo || !(fo is PDFDictionary))
            {
                return new PDFObjectRef[] { }
            }
            ;

            PDFDictionary dict = fo as PDFDictionary;

            if (null == dict)
            {
                return new PDFObjectRef[] { }
            }
            ;

            PDFName type = dict["Type"] as PDFName;

            if (null == type || type.Value != "Pages")
            {
                return new PDFObjectRef[] { }
            }
            ;


            PDFArray kids = dict["Kids"] as PDFArray;

            if (null == kids || kids.Count == 0)
            {
                return new PDFObjectRef[] { }
            }
            ;

            List <PDFObjectRef> allPages = new List <PDFObjectRef>();

            foreach (IFileObject item in kids)
            {
                PDFObjectRef pageRef = item as PDFObjectRef;

                if (null != pageRef)
                {
                    allPages.Add(pageRef);
                }
            }
            return(allPages.ToArray());
        }
コード例 #10
0
ファイル: ResourceReader.cs プロジェクト: q4a/Gibbed.RED
        void IFileStream.SerializePointer(ref List <IFileObject> value, bool encoded)
        {
            var count = encoded == false?
                        this.Stream.ReadValueS32() :
                            this.Stream.ReadValueEncodedS32();

            var list = new List <IFileObject>();

            for (int i = 0; i < count; i++)
            {
                IFileObject item = null;
                ((IFileStream)this).SerializePointer(ref item);
                list.Add(item);
            }
            value = list;
        }
コード例 #11
0
ファイル: DalcFileObject.cs プロジェクト: ruo2012/nicnet
 public virtual void CreateFile()
 {
     if (Type == FileType.Imaginary)
     {
         if (ParentName.Length > 0)
         {
             IFileObject parentFolder = DalcFs.ResolveFile(ParentName);
             if (parentFolder.Type != FileType.Folder)
             {
                 parentFolder.CreateFolder();
             }
         }
     }
     _Type = FileType.File;
     Close();
 }
コード例 #12
0
ファイル: Stat.cs プロジェクト: sasuke-arcade/BizHawk
        private void StatInternal(KStat *s, IFileObject o)
        {
            s->st_dev   = 1;
            s->st_ino   = 1;
            s->st_nlink = 0;

            uint flags = 0;

            if (o.Stream.CanRead)
            {
                flags |= S_IRUSR | S_IRGRP | S_IROTH;
            }
            if (o.Stream.CanWrite)
            {
                flags |= S_IWUSR | S_IWGRP | S_IWOTH;
            }
            if (o.Stream.CanSeek)
            {
                flags |= S_IFREG;
            }
            else
            {
                flags |= S_IFIFO;
            }
            s->st_mode = flags;
            s->st_uid  = 0;
            s->st_gid  = 0;
            s->__pad0  = 0;
            s->st_rdev = 0;
            if (o.Stream.CanSeek)
            {
                s->st_size = o.Stream.Length;
            }
            else
            {
                s->st_size = 0;
            }
            s->st_blksize = 4096;
            s->st_blocks  = (s->st_size + 511) / 512;

            s->st_atime_sec  = 1262304000000;
            s->st_atime_nsec = 1000000000 / 2;
            s->st_mtime_sec  = 1262304000000;
            s->st_mtime_nsec = 1000000000 / 2;
            s->st_ctime_sec  = 1262304000000;
            s->st_ctime_nsec = 1000000000 / 2;
        }
コード例 #13
0
ファイル: FileSystemDalc.cs プロジェクト: ruo2012/nicnet
        protected IFileObject[] Select(string tableName, QueryNode condition)
        {
            if (tableName == "." || tableName == Path.AltDirectorySeparatorChar.ToString() || tableName == Path.DirectorySeparatorChar.ToString())
            {
                tableName = "";
            }
            IFileObject fileObj = FileSystem.ResolveFile(tableName);

            if (fileObj == null)
            {
                throw new ArgumentException(String.Format("File {0} does not exist", tableName));
            }
            QueryFileSelector qFileSelector = new QueryFileSelector(false, ConditionEvaluator, condition);

            IFileObject[] foundFiles = fileObj.Type == FileType.Folder ? fileObj.FindFiles(qFileSelector) : new IFileObject[0];
            return(foundFiles);
        }
コード例 #14
0
        public static PDFReal Parse(string value, int offset, out int end)
        {
            IFileObject obj = PDFParserHelper.ParseNumericValue(value, offset, out end);

            if (obj.Type == PDFObjectTypes.Real)
            {
                return((PDFReal)obj);
            }
            else if (obj.Type == PDFObjectTypes.Number)
            {
                return(new PDFReal(((PDFNumber)obj).Value));
            }
            else
            {
                throw new PDFNativeParserException(CommonErrors.ParsedValueWasNotANumericValue);
            }
        }
コード例 #15
0
        private FindData ToFindData(IFileObject file)
        {
            var findData = new FindData(Path.GetFileName(file.Name));
            var fileInfo = file.GetContent();

            if (file.Type == FileType.Folder)
            {
                findData.Attributes |= FileAttributes.Directory;
            }
            else
            {
                findData.FileSize = fileInfo.Size;
            }
            findData.LastWriteTime = fileInfo.LastModifiedTime;
            fileInfo.Close();
            return(findData);
        }
コード例 #16
0
        /// <summary>
        /// <see cref="IFileObject.CopyFrom"/>
        /// </summary>
        protected virtual void CopyFrom(IFileObject[] srcEntries)
        {
            if (Type == FileType.File)
            {
                Delete();
            }
            if (Type == FileType.Imaginary)
            {
                CreateFolder();
            }

            foreach (IFileObject srcFile in srcEntries)
            {
                string      destFileName = Path.Combine(Name, Path.GetFileName(srcFile.Name));
                IFileObject destFile     = LocalFs.ResolveFile(destFileName);
                destFile.CopyFrom(srcFile);
            }
        }
コード例 #17
0
ファイル: MaskFileSelector.cs プロジェクト: ruo2012/nicnet
        public bool TraverseDescendents(IFileObject file)
        {
            if (PathPrefix == null)
            {
                return(true);
            }
            string fname = file.Name.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar) +
                           Path.DirectorySeparatorChar;

            if (PathPrefix.Length > fname.Length)
            {
                return(PathPrefix.StartsWith(fname, false, null));
            }
            else
            {
                return(fname.StartsWith(PathPrefix, false, null));
            }
        }
コード例 #18
0
ファイル: VfsXmlResolver.cs プロジェクト: ruo2012/nicnet
        public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
        {
            try {
                if ((ofObjectToReturn != null) && (ofObjectToReturn != typeof(Stream)))
                {
                    throw new XmlException("Unsupported object type");
                }
                string relativePath = AbsoluteBaseUri.MakeRelative(absoluteUri);
                var    fullPath     = Path.Combine(BasePath, relativePath);

                if (relativePath.IndexOfAny(new char[] { '*', '?' }) >= 0)
                {
                    // several files
                    var startPath = MaskFileSelector.GetMaskParentPath(fullPath) ?? String.Empty;
                    var startFile = FileSystem.ResolveFile(startPath);
                    var sb        = new StringBuilder();
                    sb.Append("<root>");
                    var matchedFiles = startFile.FindFiles(new MaskFileSelector(fullPath));
                    foreach (var f in matchedFiles)
                    {
                        using (var input = f.Content.GetStream(FileAccess.Read)) {
                            var fileText = new StreamReader(input).ReadToEnd();
                            fileText = MatchXmlDeclaration.Replace(fileText, String.Empty);
                            sb.Append(fileText);
                        }
                    }
                    sb.Append("</root>");
                    return(new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())));
                }
                else
                {
                    // one file
                    IFileObject file = FileSystem.ResolveFile(fullPath);
                    byte[]      fileContent;
                    using (var input = file.Content.GetStream(FileAccess.Read)) {
                        fileContent = new byte[input.Length];
                        input.Read(fileContent, 0, fileContent.Length);
                    }
                    return(new MemoryStream(fileContent));
                }
            } catch (Exception ex) {
                throw new FileSystemException(String.Format("Cannot resolve {0}: {1}", absoluteUri, ex.Message), ex);
            }
        }
コード例 #19
0
        private IEnumerable <IChange> GetFileChanges(IFileObject file, IFileObject baseFile, ISyncContext context)
        {
            // TODO: More checks?

            if (file.Length != baseFile.Length)
            {
                yield return(new ContentChange());
            }
            else if (file.LastWriteTimeUtc != baseFile.LastWriteTimeUtc)
            {
                // TODO: Make it optional
                yield return(new ContentChange());
            }

            if (!string.Equals(file.ActualName, baseFile.ActualName, StringComparison.Ordinal))
            {
                yield return(new NameCasingChange());
            }
        }
コード例 #20
0
        public bool IncludeFile(IFileObject file)
        {
            string normFileName = file.Name.Replace(Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar);
            string onlyFileName = Path.GetFileName(normFileName);

            for (int i = 0; i < Names.Length; i++)
            {
                bool isFullPath = Names[i].IndexOf(Path.DirectorySeparatorChar) >= 0;
                if (isFullPath && Names[i].Equals(normFileName, Comparision))
                {
                    return(true);
                }
                if (!isFullPath && Names[i].Equals(onlyFileName, Comparision))
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #21
0
        public void Remove_Test()
        {
            IFileObject[] all      = new IFileObject[] { new PDFNumber(1), new PDFNumber(2), new PDFNumber(3) };
            PDFArray      target   = new PDFArray(all);
            IFileObject   toremove = all[1]; //Number 2

            bool expected = true;
            bool actual;

            actual = target.Remove(toremove);
            Assert.AreEqual(expected, actual);
            Assert.AreEqual(2, target.Count);

            toremove = new PDFNumber(4);
            expected = false;
            actual   = target.Remove(toremove);
            Assert.AreEqual(expected, actual);
            Assert.AreEqual(2, target.Count);
        }
コード例 #22
0
        private void MoveToPreviousValidImage(int lastGoodIndex)
        {
            bool foundGoodImage = false;

            for (int i = FileIndex; i >= 0; i++)
            {
                IFileObject currentFile = Files[FileIndex];
                if (!IsImage(currentFile))
                {
                    continue;
                }
                foundGoodImage = true;
                FileIndex      = i;
            }
            if (!foundGoodImage)
            {
                FileIndex = lastGoodIndex;
            }
        }
コード例 #23
0
ファイル: DalcFileObject.cs プロジェクト: ruo2012/nicnet
        public void CopyFrom(IFileObject[] srcEntries)
        {
            if (Type == FileType.File)
            {
                Delete();
            }
            if (Type == FileType.Imaginary)
            {
                CreateFolder();
            }

            foreach (IFileObject srcFile in srcEntries)
            {
                string destFileName = Path.Combine(DalcFs.UnformatPath(Name),
                                                   Path.GetFileName(DalcFs.UnformatPath(srcFile.Name)));
                IFileObject destFile = DalcFs.ResolveFile(destFileName);
                destFile.CopyFrom(srcFile);
            }
        }
コード例 #24
0
        public static PDFArray ParseArray(string value, int offset, out int end)
        {
            AssertValidValue(value, offset + 1);
            if (value[offset] != ArrayStartChar)
            {
                throw new PDFNativeParserException(CommonErrors.ArrayDoesNotStartWithRequiredChar);
            }

            PDFArray arry  = new PDFArray();
            bool     ended = false;

            offset += 1;
            while (offset < value.Length)
            {
                char c = value[offset];

                if (char.IsWhiteSpace(c))
                {
                    offset++;
                }

                else if (c == ArrayEndChar)
                {
                    offset += 1;
                    ended   = true;
                    break;
                }
                else
                {
                    IFileObject obj = InferAndParseNextObject(value, offset, out end);
                    arry.Add(obj);
                    offset = end;
                }
            }
            if (!ended)
            {
                throw new PDFNativeParserException(CommonErrors.ArrayDoesNotEndWithRequiredChar);
            }

            end = offset;
            return(arry);
        }
コード例 #25
0
        public void Contains_Test()
        {
            IFileObject[] all    = new IFileObject[] { new PDFNumber(1), new PDFNumber(2) };
            PDFArray      target = new PDFArray(all);

            Assert.AreEqual(all[0], all[0], "Basic assertion that PDFNumbers are equal failed");

            IFileObject tofind   = all[0];
            bool        contains = target.Contains(tofind);

            Assert.IsTrue(contains);

            tofind   = all[1];
            contains = target.Contains(tofind);
            Assert.IsTrue(contains);

            tofind   = new PDFNumber(4);
            contains = target.Contains(tofind);
            Assert.IsFalse(contains);
        }
コード例 #26
0
ファイル: CopyFileTask.cs プロジェクト: BillSon68/Sync.Net
        private void WaitForFileToBeReady(IFileObject file)
        {
            long start = DateTime.Now.Ticks;

            while (true)
            {
                if (file.IsReady)
                {
                    break;
                }

                Thread.SpinWait(100);
                long now = DateTime.Now.Ticks;
                if (now - start > _timeout.Ticks)
                {
                    throw new TimeoutException(
                              $"File {file} has been locked for more than {_timeout.Seconds} seconds.");
                }
            }
        }
コード例 #27
0
ファイル: DalcFileSystem.cs プロジェクト: ruo2012/nicnet
        private void SaveInternal(IDictionary data, IFileObject fileObject,
                                  string tableName, string keyFieldName)
        {
            QueryConditionNode conditions = new QueryConditionNode((QField)keyFieldName,
                                                                   Conditions.Equal, (QConst)fileObject.Name);
            Hashtable recordData = new Hashtable();
            int       result     = Dalc.RecordsCount(new Query(tableName, conditions));

            if (result > 0)
            {
                if (data.Contains(keyFieldName))
                {
                    data.Remove(keyFieldName); // fixed DB bug on update
                }
                Dalc.Update(new Query(tableName, conditions), data);
            }
            else
            {
                Dalc.Insert(tableName, data);
            }
        }
コード例 #28
0
ファイル: HttpFileUtils.cs プロジェクト: uzbekdev1/nreco
        protected virtual IFileObject GetUniqueFile(IFileSystem fs, string fileName)
        {
            int         fileNum    = 0;
            IFileObject uniqueFile = null;

            do
            {
                fileNum++;
                var extIdx      = fileName.LastIndexOf('.');
                var newFileName = extIdx >= 0 ? String.Format("{0}{1}{2}", fileName.Substring(0, extIdx), fileNum, fileName.Substring(extIdx)) : fileName + fileNum.ToString();
                uniqueFile = fs.ResolveFile(newFileName);
            } while (uniqueFile.Exists() && fileNum < 100);
            if (uniqueFile.Exists())
            {
                var extIdx       = fileName.LastIndexOf('.');
                var uniqueSuffix = Guid.NewGuid().ToString();
                uniqueFile = fs.ResolveFile(
                    extIdx >= 0 ?  fileName.Substring(0, extIdx) + uniqueSuffix + fileName.Substring(extIdx) : fileName + uniqueSuffix);
            }
            return(uniqueFile);
        }
コード例 #29
0
    protected IFileObject GetThumbnail(IFileObject originalFile, IFileSystem filesystem, string width, string height)
    {
        var resizeWidth  = AssertHelper.IsFuzzyEmpty(width) ? 0 : Convert.ToInt32(width);
        var resizeHeight = AssertHelper.IsFuzzyEmpty(height) ? 0 : Convert.ToInt32(height);

        if (resizeWidth == 0 && resizeHeight == 0)
        {
            return(originalFile);
        }
        var thumbnailFileName = String.Format("{0}-thumbnail{1}x{2}{3}",
                                              Path.Combine(Path.GetDirectoryName(originalFile.Name), Path.GetFileNameWithoutExtension(originalFile.Name)),
                                              resizeWidth,
                                              resizeHeight,
                                              Path.GetExtension(originalFile.Name)
                                              );
        var thumbnailFile = filesystem.ResolveFile(thumbnailFileName);

        return(!thumbnailFile.Exists()
                                                ? ImageHelper.SaveAndResizeImage(originalFile.GetContent().InputStream, filesystem, thumbnailFile, resizeWidth, resizeHeight)
                                                : thumbnailFile);
    }
コード例 #30
0
ファイル: FileSystemDalc.cs プロジェクト: ruo2012/nicnet
        protected object GetFileObjectField(string name, IFileObject file)
        {
            if (name == "is_file")
            {
                return(file.Type == FileType.File);
            }
            if (name == "is_folder")
            {
                return(file.Type == FileType.Folder);
            }
            string fName = file.Name.Replace('\\', '/');

            if (name == "name")
            {
                return(Path.GetFileName(fName));
            }
            if (name == "full_name")
            {
                return(fName);
            }
            if (name == "ext")
            {
                return(Path.GetExtension(fName));
            }
            if (name == "folder_name")
            {
                return(Path.GetDirectoryName(fName));
            }
            IFileContent fContent = file.Content;

            if (name == "size")
            {
                return(fContent.Size);
            }
            if (name == "last_modified")
            {
                return(fContent.LastModifiedTime);
            }
            throw new ArgumentException("Unknown field name: " + name);
        }
コード例 #31
0
        public virtual IFileObject[] GetChildren()
        {
            if (Type != FileType.Folder)
            {
                throw new FileSystemException("Folder does not exist");                 // TODO: more structured exception
            }
            ChildrenList childrenList = GetChildrenList();

            string[] fileEntries      = childrenList.FileEntries;
            string[] directoryEntries = childrenList.DirectoryEntries;

            IFileObject[] children = new IFileObject[fileEntries.Length + directoryEntries.Length];
            for (int i = 0; i < directoryEntries.Length; i++)
            {
                children[i] = LocalFs.ResolveFile(Path.Combine(Name, Path.GetFileName(directoryEntries[i])), FileType.Folder);
            }
            for (int i = 0; i < fileEntries.Length; i++)
            {
                children[directoryEntries.Length + i] = LocalFs.ResolveFile(Path.Combine(Name, Path.GetFileName(fileEntries[i])), FileType.File);
            }
            return(children);
        }
コード例 #32
0
        /// <summary>
        /// <see cref="IFileObject.MoveTo"/>
        /// </summary>
        public virtual void MoveTo(IFileObject destFile)
        {
            // raise 'before move'
            LocalFs.OnFileMoving(this, destFile);

            try {
                if (destFile is LocalFile)
                {
                    // delete destination file
                    if (destFile.Type != FileType.Imaginary)
                    {
                        destFile.Delete();
                    }

                    // use fast API move functions...
                    if (Type == FileType.File)
                    {
                        File.Move(LocalName, ((LocalFile)destFile).LocalName);
                    }
                    if (Type == FileType.Folder)
                    {
                        Directory.Move(LocalName, ((LocalFile)destFile).LocalName);
                    }
                }
                else
                {
                    // copy-delete
                    destFile.CopyFrom(this);
                    this.Delete();
                }
            } catch (Exception ex) {
                // raise 'error'
                LocalFs.OnFileError(this, ex);
                throw new FileSystemException(ex.Message, this, ex);
            }

            // raise 'after move'
            LocalFs.OnFileMoved(this, destFile);
        }
コード例 #33
0
		public ImageFile(IFileObject file)
		{
			File = file;
		}
コード例 #34
0
        protected override IFileSystem doCreateFileSystem(String scheme, IFileObject file, FileSystemOptions fileSystemOptions)
        {
            if(!formatMap.ContainsKey(scheme))
            {
                throw new FileSystemException(String.Format("Unknown file system scheme: {0}", scheme));
            }

            IInArchive archive = sevenZip.CreateInArchive(SevenZipFormat.GetClassIdFromKnownFormat(formatMap[scheme]));
            if(archive == null)
            {
                throw new FileSystemException("This 7-zip library does not support this archive type.");
            }

            IFileName rootName = new LayeredFileName(scheme, file.Name, FileName_Fields.ROOT_PATH, FileType.FOLDER);

            SevenZipFileSystem fs = new SevenZipFileSystem(archive, rootName, file, fileSystemOptions);
            foreach (IFileSystemListener listener in defaultListeners)
            {
                fs.addListener(listener);
            }

            return fs;
        }
コード例 #35
0
ファイル: DirectFileCache.cs プロジェクト: gadfly/nofs
	public DirectFileCache(IFileObject file) {
		_file = file;
	}
コード例 #36
0
            public ArchiveOpenCallback(SevenZipFileSystem fileSystem, IFileObject parent, FileInfo archiveFile)
            {
                this.fileSystem = fileSystem;
                this.parent = parent;
                this.archiveFile = archiveFile;

                this.streams = new List<Stream>();
            }
コード例 #37
0
ファイル: ImportForm.cs プロジェクト: Gremlin2/bookscanner
        private void ProcessDirectory(IFileObject directory, bool includeSubDirs)
        {
            IFileObject[] files = directory.findFiles(Selectors.SELECT_CHILDREN);
            if (files == null)
            {
                return;
            }

            foreach (IFileObject file in files)
            {
                if (this.excludeList.ContainsKey(file.Name.URI))
                {
                    continue;
                }

                if (file.Type == FileType.FILE)
                {
                    IFileName name = file.Name;
                    string extension = name.Extension;

                    switch (extension)
                    {
                        case "fb2":
                            ImportFileEntry entry = new ImportFileEntry(chkSelectFoundFiles.Checked, name.BaseName, name.URI);
                            entry.Status = ImportStatus.ReadyToProcess;

                            if (entry.Selected)
                            {
                                this.processLegend.IncrementCounter(ImportStatus.ReadyToProcess);
                                this.grdLegend.RefreshDataSource();
                            }

                            this.fileEntries.Add(entry);
                            this.excludeList.Add(file.Name.URI, entry);
                            break;

                        case "zip":
                            String url = "zip:" + name.URI + "!/";

                            //string filename = Path.ChangeExtension(name.BaseName, null);
                            //if(String.Compare(Path.GetExtension(filename), ".fb2", true) == 0)
                            //{
                            //    if (this.excludeList.ContainsKey(url + filename))
                            //    {
                            //        continue;
                            //    }

                            //    entry = new ImportFileEntry(chkSelectFoundFiles.Checked, filename, url + filename);
                            //    entry.Status = ImportStatus.ReadyToProcess;

                            //    if (entry.Selected)
                            //    {
                            //        this.processLegend.IncrementCounter(ImportStatus.ReadyToProcess);
                            //        this.grdLegend.RefreshDataSource();
                            //    }

                            //    this.fileEntries.Add(entry);
                            //    this.excludeList.Add(entry.Uri, entry);
                            //    break;

                            //}

                            IFileObject zipFile = manager.resolveFile(url);
                            ProcessDirectory(zipFile, true);
                            break;

                        case "7z":
                            IFileObject sevenZipFile = manager.resolveFile("sevenzip:" + name.URI + "!/");
                            ProcessDirectory(sevenZipFile, true);
                            break;

                        case "rar":
                            IFileObject rarFile = manager.resolveFile("rar:" + name.URI + "!/");
                            ProcessDirectory(rarFile, true);
                            break;
                    }
                }
                else if (file.Type == FileType.FOLDER && includeSubDirs)
                {
                    ProcessDirectory(file, true);
                }
            }
        }
コード例 #38
0
ファイル: ImportForm.cs プロジェクト: Gremlin2/bookscanner
        private void ShowBookPreview(IFileObject fileObject)
        {
            Cursor = Cursors.WaitCursor;

            try
            {
                using (Stream stream = fileObject.Content.InputStream)
                {
                    try
                    {
                        ShowBookPreview(stream);
                    }
                    finally
                    {
                        stream.Close();
                    }
                }
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
コード例 #39
0
ファイル: ImageHelper.cs プロジェクト: Mariamfelicia/nreco
    public static IFileObject SaveAndResizeImage(Stream input, IFileSystem fs, IFileObject file, int maxWidth, int maxHeight, ImageFormat saveAsFormat )
    {
        Image img;
        MemoryStream imgSrcStream = new MemoryStream();
        byte[] buf = new byte[1024*50];
        int bufRead = 0;
        do {
            bufRead = input.Read(buf, 0, buf.Length);
            if (bufRead>0)
                imgSrcStream.Write(buf, 0, bufRead);
        } while (bufRead>0);
        imgSrcStream.Position = 0;

        try {
            img = Image.FromStream(imgSrcStream);
        } catch (Exception ex) {
            throw new Exception( WebManager.GetLabel("Invalid image format") );
        }
        if (img.Size.Width==0 || img.Size.Height==0)
            throw new Exception( WebManager.GetLabel("Invalid image size") );

        var sizeIsWidthOk = (maxWidth<=0 || img.Size.Width<=maxWidth);
        var sizeIsHeightOk = (maxHeight<=0 || img.Size.Height<=maxHeight);
        var sizeIsOk = sizeIsWidthOk && sizeIsHeightOk;

        var originalImgFmt = ResolveImageFormat( Path.GetExtension(file.Name) ) ?? ImageFormat.Bmp;
        var formatIsOk = (saveAsFormat==null && !originalImgFmt.Equals(ImageFormat.Bmp) && !originalImgFmt.Equals(ImageFormat.Tiff) ) || originalImgFmt.Equals(saveAsFormat);

        if (!formatIsOk || !sizeIsOk ) {
            var saveAsFormatResolved = saveAsFormat!=null ? saveAsFormat : (originalImgFmt==ImageFormat.Jpeg?ImageFormat.Jpeg:ImageFormat.Png);
            var newFmtExtension = GetImageFormatExtension(saveAsFormatResolved);

            var newFile = fs.ResolveFile( file.Name + (Path.GetExtension(file.Name).ToLower()==newFmtExtension ? String.Empty : newFmtExtension) );
            newFile.CreateFile();

            if (!sizeIsOk) {
                var newWidth = img.Size.Width;
                var newHeight = img.Size.Height;
                if (!sizeIsWidthOk) {
                    newWidth = maxWidth;
                    newHeight = (int) Math.Floor( ((double)img.Size.Height)*( ((double)maxWidth)/((double)img.Size.Width) )  );
                    if ( maxHeight<0 || newHeight<=maxHeight )
                        sizeIsHeightOk = true;
                }
                if (!sizeIsHeightOk) {
                    newHeight = maxHeight;
                    newWidth = (int) Math.Floor( ((double)img.Size.Width)*( ((double)maxHeight)/((double)img.Size.Height) )  );
                }
                var resizedBitmap = new Bitmap(img, newWidth, newHeight);

                var imageProps = img.PropertyItems;
                    foreach (PropertyItem propItem in imageProps){
                    resizedBitmap.SetPropertyItem(propItem);
                }

                SaveImage(resizedBitmap, newFile.GetContent().OutputStream, saveAsFormatResolved);

            } else {
                SaveImage(img, newFile.GetContent().OutputStream, saveAsFormatResolved );
            }
            newFile.Close();
            return newFile;
        }
        file.CreateFile();
        imgSrcStream.Position = 0;
        file.CopyFrom( imgSrcStream );
        file.Close();
        return file;
    }
コード例 #40
0
ファイル: ImageHelper.cs プロジェクト: Mariamfelicia/nreco
 public static IFileObject SaveCompressedImage(Stream input, IFileSystem fs, IFileObject file)
 {
     return SaveAndResizeImage(input, fs, file, 0, 0);
 }
コード例 #41
0
ファイル: ImageHelper.cs プロジェクト: Mariamfelicia/nreco
 public static IFileObject SaveAndResizeImage(Stream input, IFileSystem fs, IFileObject file, int maxWidth, int maxHeight )
 {
     return SaveAndResizeImage(input,fs,file,maxWidth,maxHeight,null);
 }
コード例 #42
0
 private FindData ToFindData(IFileObject file)
 {
     var findData = new FindData(Path.GetFileName(file.Name));
     var fileInfo = file.GetContent();
     if (file.Type == FileType.Folder) findData.Attributes |= FileAttributes.Directory;
     else findData.FileSize = fileInfo.Size;
     findData.LastWriteTime = fileInfo.LastModifiedTime;
     fileInfo.Close();
     return findData;
 }
コード例 #43
0
		public static bool IsImage(IFileObject file)
		{
			return _ImageFileExtensions.Contains(file.Extension);
		}