![]() |
случайная выборка файла
в общем проблема в следующем - имеется каталог текстур с кучей подкаталогов общим весом более 20 гигов. задача - нужно в случайном порядке брать текстуру и выводить ее на экран. возникает вопрос как лучше и грамотней это реализовать?
|
Ответ: случайная выборка файла
чтоб не вызывать затратную переборку всех файлов лучше предварительно сгенерить список (txt) и брать из него.
|
Ответ: случайная выборка файла
про сгенерированный список я подумал сразу, но тоже не вариант, т.к. файлов слишком много, да и добавляться они будут постоянно...
|
Ответ: случайная выборка файла
Обозвать файлы номерами по порядку, генерить рандомное число, приписывать расширение и использовать как имя загружаемого файла.
|
Ответ: случайная выборка файла
честно говоря, не понимаю проблемы - читаете имена файлов (можно рекурсивно по директориям, если вложенность не глубока), для каждого файла создаете экземпляр:
Код:
Type TFile Для удобства доступа, после завершения построения списка, можно сохранить элементы в массив Dim MyFiles.TFile(FileCount). FileCount - инкрементальный счётчик, который куртился по мере четния директорий. Код:
Delete Each tFILE Код:
Type tFILE Код:
Dim LIST.tFILE(0) |
Ответ: случайная выборка файла
Graphics 800,600,0,2
SetBuffer BackBuffer () Global sss=WriteFile ("spisok.txt") oldTime=MilliSecs() ScanDir("D:\tex\") CloseFile sss newTime=MilliSecs() Print (Newtime-oldtime)/1000.0 WaitKey() End Function ScanDir(path$) dir = ReadDir(path$) Repeat file$ = NextFile(dir) If file$ = "" Then Exit If file$ <> "." And file$ <> ".." Then Select FileType(path$ + file$) Case 1 WriteLine sss,path$ + file$ Case 2 ScanDir(path$ + file$ + "\") End Select EndIf Forever CloseDir dir End Function в общем я сделал так, результаты меня порадовали - 28 гигов за 7 секунд (хотя если написать библу на пурике, я думаю будет быстрее) и размер файла со списком получился почти 12 мегов. осталась проблема, как сделать случайное чтение из списка не загружая весь файл в память? |
Ответ: случайная выборка файла
Генеришь число от 1 до КоличествоСтрок/записей и читаешь файл до нужной строки/записи построчно.
|
Часовой пояс GMT +4, время: 17:11. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot