Короче, кропаю СиДиШелл к мп3-коллекциям. Оный должен быть не зависим от файлов, и, соответственно, читать ИД3 на лету или что-нить в духе... пока есть код (JS в HTML-e)типа

Код:
processNextFile = function()
{
// procedure HDD timing: 1.7 sec per ~4MB file
if(!mp3fc.atEnd())
{
var mp3_fn = mp3fc.item().name.toString();
var id3pos = mp3fc.item().size - 8*16;
var stream = mp3fc.item().openAsTextStream(1, 0);
stream.Skip( id3pos );
var id3tag = stream.Read( 3*16 );
stream.Close();
var id3sign = id3tag.substr(0, 3);
var id3title = id3tag.substr(3, 2*(16 - 1));
var id3artist = id3tag.substr(2*16);
progressbar.FrameNum = 100*mp3i / mp3filesTotal;
progresstxt.value = "Indexing file "+mp3i+" of "+mp3filesTotal;
// include only files with ID3
if(id3sign == "TAG") window.m3ufiles[window.m3ufiles.length] = new m3uEntry(id3artist, id3title, mp3Folder +"\\"+ mp3_fn, window.m3ufiles.length - 1);
mp3fc.moveNext(); mp3i++; setTimeout("processNextFile()", 100);
}
else onIndexComplete();
}
......
var mp3FolderName = "mp3"; // name of folder in parent folder
var currentFolder = window.location.pathname;
currentFolder = currentFolder.slice(1, currentFolder.lastIndexOf("\\"));
var mp3Folder = currentFolder.slice(0, currentFolder.lastIndexOf("\\")) + "\\" +
mp3FolderName;
var FileSystemObj, mp3files, mp3filesTotal, mp3i, mp3fc;
try
{
FileSystemObj = new ActiveXObject("Scripting.FileSystemObject");
mp3files = FileSystemObj.GetFolder(mp3Folder).files;
mp3filesTotal = parseInt(mp3files.Count.toString()); // loose 'Count' reference
mp3i=1; mp3fc = new Enumerator(mp3files);
.........
ну, там оная функция вызывается, прогрессбар апдейтится, и т.п.
Проблема в
stream.Skip( id3pos ); – эта фигня ЧИТАЕТ файл, вместо того чтобы передвинуть указатель.
Вопрос: подскажите способ ускорить, ясен день, что ж ещё...
Жаба-аплеты предлагать сюда:
arse@mail15.com