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); } } }
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; }
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; }
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"); }