示例#1
0
        public static SlfFile Create(DirectoryInfo aDir, string aSearchPattern, SearchOption aSearchOptions)
        {
            FileInfo[] _files = aDir.GetFiles(aSearchPattern, aSearchOptions);
            if (_files == null || _files.Length == 0)
            {
                return(null);
            }

            SlfFile.Header FHeader = new Header();
            FHeader.LibName = String.Format("{0}.SLF", aDir.Name);

            if (aSearchOptions == SearchOption.AllDirectories)
            {
                FHeader.PathToLibrary = String.Format("{0}\\", aDir.Name);
            }
            else
            {
                FHeader.PathToLibrary = String.Empty;
            }

            FHeader.iEntries = _files.Length;
            FHeader.iUsed    = _files.Length;
            FHeader.iSort    = -1;
            FHeader.iVersion = 512;

            DirectoryInfo[] _subDirs = aDir.GetDirectories();

            FHeader.fContainsSubDirectories = (byte)(_subDirs.Length > 0 ? 1 : 0);

            int _dirLength = aDir.FullName.Length + 1;

            SlfFile.Record[] _records = new SlfFile.Record[_files.Length];
            SlfFile.Record[] FRecords = new SlfFile.Record[FHeader.iEntries];
            for (int i = 0; i < _files.Length; i++)
            {
                FileInfo _file = _files[i];

                SlfFile.Record.Header _recHeader = new Record.Header();
                _recHeader.FileName = _file.FullName.Substring(_dirLength);
                _recHeader.FileTime = _file.CreationTimeUtc;
                _recHeader.uiLength = (uint)_file.Length;
                SlfFile.Record _rec = new Record(_recHeader);

                using (FileStream _fs = new FileStream(_file.FullName, FileMode.Open))
                {
                    _rec.LoadData(_fs);
                }

                FRecords[i] = _rec;
                string _key = _rec.FileName;
                if (_rec.State != FileOk)
                {
                    _key = String.Format("{0}_{1}", _rec.FileName, _rec.State);
                }
            }

            SlfFile _slf = new SlfFile(FHeader, FRecords);

            return(_slf);
        }
示例#2
0
        private void LoadHeader(FileStream aInput)
        {
            Deserializer _deserializer = new Deserializer(aInput);

            this.FHeader  = (Header)_deserializer.Deserialize(typeof(Header));
            this.FRecords = new Record[this.FHeader.iEntries];

            //Заголовки файлов в конце SLF-архива!!!
            aInput.Seek(-RecordHeaderSize * FHeader.iEntries, SeekOrigin.End);

            for (int i = 0; i < FHeader.iEntries; i++)
            {
                Record.Header _recordHeader =
                    (Record.Header)_deserializer.Deserialize(typeof(Record.Header));

                Record _record = new Record(_recordHeader);
                this.FRecords[i] = _record;
            }
        }