public static void WriteTagV2(byte[] raw, FileInfo file, Rewriter.Strategy strategy = Rewriter.Strategy.Exact) { CheckTagSizeV2(raw); CheckMpegOffset(file); using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write)) { if (VirtualDrive.ExistsFile(file.FullName)) { Rewriter rewriter = new Rewriter(strategy); int padding = rewriter.Rewrite(raw.Length, file); if (padding != TagSize(raw)) { raw = RecreateTagWithNewTagSize(raw, padding); } } using (BinaryWriter writer = OpenWriter(file)) { writer.Write(raw); } } CheckMpegOffset(file); }
public static void WriteTagV2(Tag tag, FileInfo file, Rewriter.Strategy strategy = Rewriter.Strategy.Exact) { Debug.Assert(tag.DescriptionMap.Version != Version.v1_0); using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write)) { int tagSize = TagSize(tag); tag.Codec.Header.Size = tagSize - tag.Codec.Header.HeaderSize; if (VirtualDrive.ExistsFile(file.FullName)) { Rewriter rewriter = new Rewriter(strategy); int padding = rewriter.Rewrite(tagSize, file); if (padding != tagSize) { tag.Codec.Header.Size = padding - tag.Codec.Header.HeaderSize; } } using (Writer writer = new Writer(file)) { tag.Write(writer); } } }
public static void WriteTag(Tag tag, FileInfo file, Rewriter.Strategy strategy = Rewriter.Strategy.Exact) { using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write)) { if (tag.DescriptionMap.Version == Version.v1_0) { WriteTagV1(tag, file); } else { WriteTagV2(tag, file, strategy); } } }
public static void WriteTag(byte[] raw, FileInfo file, Rewriter.Strategy strategy = Rewriter.Strategy.Exact) { using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write)) { if (HasTagV1(raw)) { WriteTagV1(raw, file); } else if (HasTagV2(raw)) { WriteTagV2(raw, file, strategy); } else { StripTags(file, 0, 0); } } CheckMpegOffset(file); }
public static void WriteTagV1(Tag tag, FileInfo file) { using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write)) { bool existingTag = HasTagV1(file); long fileLength = VirtualDrive.FileLength(file.FullName); using (Writer writer = new Writer(file)) { if (existingTag) { writer.Seek(fileLength - HeaderV1.totalSize, SeekOrigin.Begin); } else { writer.Seek(fileLength, SeekOrigin.Begin); } tag.Write(writer); } } }
public static void WriteTagV1(byte[] raw, FileInfo file) { using (VirtualDriveLock fileLock = new VirtualDriveLock(file.FullName, AccessObserver.AccessType.Write)) { bool existingTag = HasTagV1(file); long fileLength = VirtualDrive.FileLength(file.FullName); using (BinaryWriter writer = OpenWriter(file)) { if (existingTag) { writer.BaseStream.Seek(fileLength - HeaderV1.totalSize, SeekOrigin.Begin); } else { writer.BaseStream.Seek(fileLength, SeekOrigin.Begin); } writer.Write(raw); } } CheckMpegOffset(file); }