示例#1
0
文件: TagUtils.cs 项目: MRoc/puremp3
        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);
        }
示例#2
0
文件: TagUtils.cs 项目: MRoc/puremp3
        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);
                }
            }
        }
示例#3
0
文件: TagUtils.cs 项目: MRoc/puremp3
 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);
         }
     }
 }
示例#4
0
文件: TagUtils.cs 项目: MRoc/puremp3
        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);
        }
示例#5
0
文件: TagUtils.cs 项目: MRoc/puremp3
        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);
                }
            }
        }
示例#6
0
文件: TagUtils.cs 项目: MRoc/puremp3
        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);
        }