Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
                }
            }
        }
Exemplo n.º 3
0
 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);
         }
     }
 }
Exemplo n.º 4
0
        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);
        }