Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ QDir&QFile

Автор: Алексей 1.6.2010, 15:07

Здравствуйте все!

Помогите пож-та решить одну задачу: нужно выбрать из каталога все файлы с нулевым размером.

Отсюда вопрос(ы): можно ли создать такой фильтр, который поможет сделать это, или же (если это невозможно) то как можно получать из указанного каталога файлы, так сказать, по одному, то есть не прибегая к помощи entryList&entryInfoList чтобы уже потом преобразовывать имя файла в QFile и уже выяснять его размер.

Попробую объяснить почему такие сложности: папка может хранить до 100 млн. файлов и мне кажется, что если все это осядет в QStringList, то ОЗУ бедного компьютера немножко поплохеет, так как только одни указатели QStringList'a сожрут ~400Мб оперативки.

Или я неправ?

Если у кого есть советы и предложения поделитесь пожалуйста.

Автор: Litkevich Yuriy 1.6.2010, 16:11

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

QStringList zeroFiles;
QDir dir("./");
QStringList allFiles = dir.entryInfoList("*.*", QDir::Files | QDir::NoSymLink);
foreach(QString f, allFiles){
    if(!QFileInfo(f).size())
        zeroFiles << f;
}

Автор: Алексей 1.6.2010, 16:38

Спасибо, Юрий!

Вашего-то ответа мне и хотелось услышать. Однако жаль :(
Будем надеяться, что ОСи где будет работать программа будут часть этого списка скидывать в своп.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)