コード例 #1
0
        override public void Write(BackupEntry entry)
        {
            base.Write();

            Console.WriteLine("Compressing: " + entry.RealPath);
            ZipEntry ez;
            string   entryPath = Path.GetPathRoot(entry.RealPath).Remove(1) + "/";

            if (entry.Info.IsDirectory)
            {
                entryPath += _zipFactory.NameTransform.TransformDirectory(entry.RealPath);
                ez         = _zipFactory.MakeDirectoryEntry(entryPath, false);
            }
            else if (entry.Info.IsFile)
            {
                // Windows specific metadata (timestamps)
                NTTaggedData meta = new NTTaggedData();
                meta.CreateTime           = entry.Info.Created;
                meta.LastModificationTime = entry.Info.LastModified;
                meta.LastAccessTime       = entry.Info.LastAccessed;

                entryPath   += _zipFactory.NameTransform.TransformFile(entry.RealPath);
                ez           = _zipFactory.MakeFileEntry(entryPath, false);
                ez.DateTime  = entry.Info.LastModified;
                ez.ExtraData = meta.GetData();
            }
            else
            {
                return;
            }

            _zip.PutNextEntry(ez);

            if (entry.Info.IsFile)
            {
                using (Stream fs = entry.Stream)
                {
                    int sourceBytes;
                    do
                    {
                        sourceBytes = fs.Read(_buffer, 0, _buffer.Length);
                        _zip.Write(_buffer, 0, sourceBytes);
                    } while (sourceBytes > 0);
                }
            }
        }
コード例 #2
0
ファイル: ZipExtraData.cs プロジェクト: ouyh18/LteTools
        private static ITaggedData Create(short tag, byte[] data, int offset, int count)
        {
            ITaggedData data2;
            switch (tag)
            {
                case 10:
                    data2 = new NTTaggedData();
                    break;

                case 0x5455:
                    data2 = new ExtendedUnixData();
                    break;

                default:
                    data2 = new RawTaggedData(tag);
                    break;
            }
            data2.SetData(data, offset, count);
            return data2;
        }
コード例 #3
0
ファイル: ZipExtraData.cs プロジェクト: modulexcite/graveyard
 ITaggedData Create(short tag, byte[] data, int offset, int count)
 {
     ITaggedData result = null;
     switch ( tag )
     {
         case 0x000A:
             result = new NTTaggedData();
             break;
         case 0x5455:
             result = new ExtendedUnixData();
             break;
         default:
             result = new RawTaggedData(tag);
             break;
     }
     result.SetData(data_, readValueStart_, readValueLength_);
     return result;
 }
コード例 #4
0
ファイル: ZipTests.cs プロジェクト: modulexcite/graveyard
        public void TaggedDataHandling()
        {
            var tagData = new NTTaggedData();
            var modTime = tagData.LastModificationTime;
            var rawData = tagData.GetData();
            tagData.LastModificationTime = tagData.LastModificationTime + TimeSpan.FromSeconds(40);
            tagData.SetData(rawData, 0, rawData.Length);
            Assert.AreEqual(10, tagData.TagID, "TagID mismatch");
            Assert.AreEqual(modTime, tagData.LastModificationTime, "NT Mod time incorrect");

            tagData.CreateTime = DateTime.FromFileTimeUtc(0);
            tagData.LastAccessTime = new DateTime(9999, 12, 31, 23, 59, 59);
            rawData = tagData.GetData();

            var unixData = new ExtendedUnixData();
            modTime = unixData.ModificationTime;
            unixData.ModificationTime = modTime; // Ensure flag is set.

            rawData = unixData.GetData();
            unixData.ModificationTime += TimeSpan.FromSeconds(100);
            unixData.SetData(rawData, 0, rawData.Length);
            Assert.AreEqual(0x5455, unixData.TagID, "TagID mismatch");
            Assert.AreEqual(modTime, unixData.ModificationTime, "Unix mod time incorrect");
        }