Russian Qt Forum

Qt => Общие вопросы => Тема начата: Anton от Июль 19, 2005, 22:39



Название: Как обработать все файлы из папки?
Отправлено: Anton от Июль 19, 2005, 22:39
Например, из текущей папки мне нужно обработать (открыть, выдрать строки и пр.) все файлы, как ЭТО сделать?


Название: Как обработать все файлы из папки?
Отправлено: Perchilla от Июль 20, 2005, 01:27
Вот ведь задача. Я тоже кроме платформозависимых штук ничего не придумал  :shock: .


Название: Как обработать все файлы из папки?
Отправлено: L.Marvell от Июль 20, 2005, 19:18
версия Qt?
если 4, то QDir::etryList(...)


Название: Как обработать все файлы из папки?
Отправлено: SLiDER от Июль 20, 2005, 22:43
To All. Господа, что вы, ведь на Qt свет клином не сошелся. есть еще масса хороших библиотек, чего нет в Qt можно достать там.

To Anton. Boost::filesystem спасет вас. Подробности там -> http://boost.org/libs/filesystem/doc/index.htm


Название: Как обработать все файлы из папки?
Отправлено: Hellenna от Июль 21, 2005, 13:35
Цитата: "L.Marvell"
версия Qt?
если 4, то QDir::etryList(...)

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


Название: Как обработать все файлы из папки?
Отправлено: ElderOrb от Июль 21, 2005, 14:24
А может быть кто-нибудь знает каким образом получить QFileInfoList директорий, не содержащий в себе директорий "." и ".." ?


Название: Как обработать все файлы из папки?
Отправлено: Zigmar от Июль 21, 2005, 20:59
Цитата: "ElderOrb"
А может быть кто-нибудь знает каким образом получить QFileInfoList директорий, не содержащий в себе директорий "." и ".." ?

А в чем проблемма их пропускать?!


Название: Как обработать все файлы из папки?
Отправлено: Sergeich от Июль 22, 2005, 01:09
Цитата: "Perchilla"
Вот ведь задача. Я тоже кроме платформозависимых штук ничего не придумал  :shock: .

А чем тебя кутевые ср-ва не устроили?


Название: Как обработать все файлы из папки?
Отправлено: Lem03 от Июль 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 от Июль 22, 2005, 11:21
К примеру я хочу сделать рекурсивную функцию, которая проверяет, содержит ли каталог подкаталоги, и если да - вызывает сама себя для каждого подкаталога, а если нет - удаляет каталог при условии что он не содержит файлов определённого расширения. В этом случае отсеивать "." и ".." желательно на этапе формирования списка подкаталогов через QDir::entryInfoList. Тогда можно было бы посмотреть пуст ли сгенерённый entryInfoList. Я думал что установка фильтров типа QDir::Dirs | QDir::NoSymLinks поможет. Ошибался, однако..

p.s. Скорее всего "." и ".." перестанут быть проблемой если использовать более "ровный" алгоритм рекурсивного поиска. Я же стал реализовывать всё так, как это сразу пришло в голову.. ж)


Название: Как обработать все файлы из папки?
Отправлено: L.Marvell от Июль 22, 2005, 13:14
Цитата: "Hellenna"
Цитата: "L.Marvell"
версия Qt?
если 4, то QDir::etryList(...)

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

Третью не юзал, потому не знаю :) Начал сразу с 4


Название: Как обработать все файлы из папки?
Отправлено: Perchilla от Июль 22, 2005, 22:14
Цитата: "Sergeich"
Цитата: "Perchilla"
Вот ведь задача. Я тоже кроме платформозависимых штук ничего не придумал  :shock: .

А чем тебя кутевые ср-ва не устроили?
не знал про QDir. Теперь знаю  :) .


Название: Как обработать все файлы из папки?
Отправлено: Hellenna от Июль 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 от Июль 25, 2005, 21:01
Спасибо!.. К этому времени я примерно также решил вопрос ж) Но вот что мне до сих пор не нравится - так это невозможность заданием какого-нибудь фильтра отсеить "." и ".." на этапе создания списка. Послать что ли на троллтех "фича реквест"?