Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Стереть конец файла! Добавлено: 01.03.04 02:33  

Автор вопроса:  Neco | Web-сайт: neco.pisem.net | ICQ: 247906854 

Народ! Здарова!
У меня здесь ночь, поэтому доброго всем утра!
8)
Спать хочется-а-а...
Ближе к делу. Начал тут создавать класс для редактирования тэгов первой версии (по примеру Беляева) и вдруг понял, что класс должен уметь удалять тэги вообще. Не знаю, кому может понадобиться, но раз начал писать - надо! И вот тут-то вышла заминочка... Тэги первой версии, как вы все, наверное, знаете, храняться в последних 127 байтах файла. Чтобы удалить тэг, их можно затереть нулями, но это нехарашо как-то. Получается, что каждый созданный, а потом удалённый тэг будет прибавлять файлу вес. Значит надо удалить конец файла. "Всего-то!" - подумал я и ... тормознулся! Я-то оказывается, понятия не имею, как можно уменьшить размер файла. Некоторую долю шока даже испытал... Неприятно...
Я понимаю, что самый простой способ - это скопировать в переменную начало (весь файл минус 127 байт) и записать его во второй файл, потом первый стереть и переименовать второй в первый. Но этот способ вынуждает останавливать трэк, а WinAmp делает это без срывов (в отличие от редактирования тэгов второй версии - вот где гимор-то).
Так вот, народ. Подскажите, пожалуйста, как разобраться с этой, на первый взгляд плёвой, проблемой.

P.S. Может ответ и очевиден, но я сейчас спать хочу - голова работает в экономичном режиме. Задам вопрос и лапки кверху. Это я к тому, что если я завтра утром, вдруг пойму КАК, то сразу вам расскажу...

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #1
Добавлено: 01.03.04 08:27

По поводу того, что WinAMP делает это без срывов, мне кажется, что он использует для воспроизведения маппированный файл (хотя непонятно, почему он тогда отрубается, если файл вдруг становится недоступным?), а исправляет реальный. А еще вариант - он откладывает изменение файла... Хотя не проверял, сложно сказать.

Ответить

Номер ответа: 2
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #2
Добавлено: 01.03.04 11:02

А может WinAmp попросту кэширует некоторое кол-во информации..
А вообще я вот сейчас посмотрел, удалил ID v3 тэг, файл сколько весил, так ни на байт и не полегчал... Заполнил весь, не потяжелел, так что похоже никто на этом не заморачивался...

Ответить

Номер ответа: 3
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #3 Добавлено: 01.03.04 14:22

Это как кэш в винампе настроен. Если поставишь метров 6-7 - будет весь файл в него загонять, потом его хоть удаляй - все равно он его играть будет. Проверено.

Ответить

Номер ответа: 4
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #4
Добавлено: 04.03.04 01:32

Народ! Вчера решил проблему:

Dim strTmp As String
Open strFile For Binary Access Read Lock Write As #1
    'Seek #1, LOF(1) - 127
    strTmp = Space$(LOF(1) - 127)
    Get #1, 1, strTmp
Close #1
Open strFile For Output As #1
    Print #1, strTmp
Close #1

2LamerOnLine: А почему же тогда при применении изменений тэгов второй версии идёт скачок, а при изменении первых нет? ИМХО тут дело именно в том, что изменения в конце файла ему по шарабану - он читает из середины. А когда ВинАмп удаляет начало файла, то он, как я понимаю, сначала запоминает место на котором играл, потом закрывает, быстренько редактирует, включает его снова и ставит время как было, ну и, может, плюс время на перезапись. Но точность, видимо, не ВАХ (может до секунды?), поэтому и срывает.

Хотя я, конечно, могу и ошибаться. 8)

Спасибо всем за участие!!!

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #5
Добавлено: 04.03.04 11:42

:))) Necо, все равно, ты при таком подходе файл удаляешь, т.е. при открытиии файла For Output, все содержимое файла - теряется, так что это мало отличается от того чтобы удалить файл...

Neco, я в предыдущем посте сказал же что файл размера не меняет, пробуй сам!!! Т.е. WinAmp не удаляет данные, а попросту заполняет их нулями!!! А вторые теги (т.к. они не имеют какого-то ограничения), их нулями заполнять не реально, и вот тут уже WinAmp перезаписывает данные в файл.
Все вышесказанное, естесственно, только мои предположения, и на то что они есть правда нет ни какой гарантии (WinAmp не емть Open Source программа), но судя по его поведению, все так и есть...

Ответить

Номер ответа: 6
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #6 Добавлено: 04.03.04 14:29

А я тебе про что говорю? Разумеется, WinAmp буферизирует часть файла, и пока он его воспроизводит - он к нему периодически возвращается. Попробуешь изменить файл в это время - возникнут проблемы. На последние 127 байт ему наплевать, это логично.

Когда же буфер стоит метров на 7, он считывает файл целиком и закрывает его. Дальнейшие извращения над файлом на звучании не сказываются. Сам проверь.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам