Russian Qt Forum
Май 15, 2024, 23:58 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как обработать все файлы из папки?  (Прочитано 13953 раз)
Anton
Гость
« : Июль 19, 2005, 22:39 »

Например, из текущей папки мне нужно обработать (открыть, выдрать строки и пр.) все файлы, как ЭТО сделать?
Записан
Perchilla
Гость
« Ответ #1 : Июль 20, 2005, 01:27 »

Вот ведь задача. Я тоже кроме платформозависимых штук ничего не придумал  :shock: .
Записан
L.Marvell
Гость
« Ответ #2 : Июль 20, 2005, 19:18 »

версия Qt?
если 4, то QDir::etryList(...)
Записан
SLiDER
Гость
« Ответ #3 : Июль 20, 2005, 22:43 »

To All. Господа, что вы, ведь на Qt свет клином не сошелся. есть еще масса хороших библиотек, чего нет в Qt можно достать там.

To Anton. Boost::filesystem спасет вас. Подробности там -> http://boost.org/libs/filesystem/doc/index.htm
Записан
Hellenna
Гость
« Ответ #4 : Июль 21, 2005, 13:35 »

Цитата: "L.Marvell"
версия Qt?
если 4, то QDir::etryList(...)

в 3.3.4. тоже есть QDir::entryList() и оно работает.
Записан
ElderOrb
Гость
« Ответ #5 : Июль 21, 2005, 14:24 »

А может быть кто-нибудь знает каким образом получить QFileInfoList директорий, не содержащий в себе директорий "." и ".." ?
Записан
Zigmar
Гость
« Ответ #6 : Июль 21, 2005, 20:59 »

Цитата: "ElderOrb"
А может быть кто-нибудь знает каким образом получить QFileInfoList директорий, не содержащий в себе директорий "." и ".." ?

А в чем проблемма их пропускать?!
Записан
Sergeich
Гость
« Ответ #7 : Июль 22, 2005, 01:09 »

Цитата: "Perchilla"
Вот ведь задача. Я тоже кроме платформозависимых штук ничего не придумал  :shock: .

А чем тебя кутевые ср-ва не устроили?
Записан
Lem03
Гость
« Ответ #8 : Июль 22, 2005, 11:08 »

Может я не вполне понял задачу, но по моему все проще.
Вот например размер каталога:

long long Form1::imageSpace( const QString &path )
{
  QDir dir(path);
  QStringList files = dir.entryList("*", QDir::Files);
  long long size = 0;
  QStringList::Iterator it;
  it = files.begin();
  while (it != files.end())
  {
    size += QFileInfo(path, *it).size();
    ++it;
  }

  QStringList dirs = dir.entryList(QDir::Dirs);
  it = dirs.begin();
  while (it != dirs.end())
  {
    if (*it != "." && *it != "..")
      size += imageSpace(path + "/" + *it);
    ++it;
  }
  return size;
}
Записан
ElderOrb
Гость
« Ответ #9 : Июль 22, 2005, 11:21 »

К примеру я хочу сделать рекурсивную функцию, которая проверяет, содержит ли каталог подкаталоги, и если да - вызывает сама себя для каждого подкаталога, а если нет - удаляет каталог при условии что он не содержит файлов определённого расширения. В этом случае отсеивать "." и ".." желательно на этапе формирования списка подкаталогов через QDir::entryInfoList. Тогда можно было бы посмотреть пуст ли сгенерённый entryInfoList. Я думал что установка фильтров типа QDir::Dirs | QDir::NoSymLinks поможет. Ошибался, однако..

p.s. Скорее всего "." и ".." перестанут быть проблемой если использовать более "ровный" алгоритм рекурсивного поиска. Я же стал реализовывать всё так, как это сразу пришло в голову.. ж)
Записан
L.Marvell
Гость
« Ответ #10 : Июль 22, 2005, 13:14 »

Цитата: "Hellenna"
Цитата: "L.Marvell"
версия Qt?
если 4, то QDir::etryList(...)

в 3.3.4. тоже есть QDir::entryList() и оно работает.

Третью не юзал, потому не знаю Улыбающийся Начал сразу с 4
Записан
Perchilla
Гость
« Ответ #11 : Июль 22, 2005, 22:14 »

Цитата: "Sergeich"
Цитата: "Perchilla"
Вот ведь задача. Я тоже кроме платформозависимых штук ничего не придумал  :shock: .

А чем тебя кутевые ср-ва не устроили?
не знал про QDir. Теперь знаю  Улыбающийся .
Записан
Hellenna
Гость
« Ответ #12 : Июль 25, 2005, 20:47 »

Цитата: "ElderOrb"
К примеру я хочу сделать рекурсивную функцию, которая проверяет, содержит ли каталог подкаталоги, и если да - вызывает сама себя для каждого подкаталога, а если нет - удаляет каталог при условии что он не содержит файлов определённого расширения.

 
когда-то писала функцию рекурсивного удаления файлов из каталога. Может поможет, по-моему, вставить туда проверку условия не сложно  :wink:
Код:
 bool TextEdit::removeDir(const QString dirName){
QDir dir(dirName);
        if(dir.exists()){
QStringList files_list=dir.entryList(QDir::Files|QDir::Dirs);
for (QStringList::Iterator it = files_list.begin(); it != files_list.end(); ++it){
if( ((*it)==".")||((*it)=="..")) continue;
QFileInfo fi=QFileInfo(dirName+"/"+(*it));
if(fi.isFile()==true){
QFile file;
if(!file.remove(dirName+"/"+(*it))) return false;

}
else {
if(!removeDir(dirName+"/"+(*it)))
return false;

}
}
//функция заточена под Unix/Linux - эта строка удаляет каталог, если он не содержит файлов (любых)
if(system(QString("rmdir ")+"\""+(const char*)dirName.local8Bit()+"\"")!=0)
return false;
}
return true;

}
Записан
ElderOrb
Гость
« Ответ #13 : Июль 25, 2005, 21:01 »

Спасибо!.. К этому времени я примерно также решил вопрос ж) Но вот что мне до сих пор не нравится - так это невозможность заданием какого-нибудь фильтра отсеить "." и ".." на этапе создания списка. Послать что ли на троллтех "фича реквест"?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 20.