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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Добавление всех файлов из заданного каталога  (Прочитано 10078 раз)
Herr
Гость
« : Май 13, 2010, 22:40 »

Необходимо задавать в файловом диалоге каталог и на выходе получать добавление в программу всех файлов определенного типа из заданного каталога.

Как я понял, QFileDialog::getExistingDirectory возвращает лишь сам адрес каталога, а несколько файлов можно добавить только через QFileDialog::getOpenFileNames и то путем ручного выделения каждого файла.

Можете посоветовать выход из этой ситуации?
Записан
nixman05
Гость
« Ответ #1 : Май 14, 2010, 00:00 »

Можно попробовать реализовать через QFileSystemModel http://doc.qt.nokia.com/4.6/qfilesystemmodel.html

например

Код
C++ (Qt)
QFileSystemModel *fileModel=new QFileSystemModel();
fileModel->setRootPath(path_to_files);
 

затем, для того, чтобы получить имя файла используется fileName ( const QModelIndex & index ) const
(или filePath( const QModelIndex & index)  для получения полного пути)


также можно устанавливать фильтры при помощи setFilter и setNameFilter
Записан
garryHotDog
Гость
« Ответ #2 : Май 14, 2010, 06:07 »

Кол-во файлов можно получить с помощью QDir:
Цитировать
QStringList   entryList ( const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort ) const
но это получение файлов\директорий в текущей директории, без поддиректорий....более сложный и рекурсивный вариант (вхождение в поддиректории):
Код
C++ (Qt)
//------------------------------------------------------------
// Просканируем директорию(рекурсивно)
//------------------------------------------------------------
void CDirController::ScanDir
(
QFileInfoList &AFileInfoList, // список всех файлов
QString &ADirname            // имя сканируемой директории
)
{
// Если имя директории не пустое
if(!ADirname.isEmpty())
{
// Временная переменная.
QFileInfoList tmpDirList;
// Временная переменная.
QFileInfoList tmpFileList;
// Директория.
QDir dir(ADirname);
// Если директория существует.
if(dir.exists()==true)
{
// получу список файлов.
tmpFileList=dir.entryInfoList(QDir::Files|QDir::Readable,QDir::NoSort);
// если список не пустой.
if(tmpFileList.isEmpty()==false)
{
// Добавим список файлов.
AFileInfoList+=tmpFileList;
}
else{}
// получу список директорий.
tmpDirList=dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot,QDir::NoSort);
// Если есть еще директории.
if(tmpDirList.size()!=0x00)
{
// Пройдем все директории.
for(quint32 icycle=0x00;icycle<tmpDirList.size();icycle++)
{
// Пройдемся по директории.
ScanDir(AFileInfoList,tmpDirList[icycle].filePath());
}
}
else{}
}
else{}
}
else{}
}
 
Использование:
Код
C++ (Qt)
// Список файлов.
QFileInfoList FileInfoList;
QString workDir="c:\\in";
 
// просканируем директорию.
ScanDir(FileInfoList,workDir);
 
Записан
Kolobok
Гость
« Ответ #3 : Май 14, 2010, 11:07 »

Кол-во файлов можно получить с помощью QDir:

Не только количество, но и названия файлов.

но это получение файлов\директорий в текущей директории, без поддиректорий....более сложный и рекурсивный вариант (вхождение в поддиректории):

Для этого существует QDirIterator
Записан
garryHotDog
Гость
« Ответ #4 : Май 14, 2010, 12:00 »

Цитировать
Не только количество, но и названия файлов.
для этого есть QFileInfoList !!! это список файлов с доп. инфой (читай в ассисте)

« Последнее редактирование: Май 14, 2010, 12:08 от garryHotDog » Записан
Kolobok
Гость
« Ответ #5 : Май 14, 2010, 13:46 »

Ты хочешь сказать, что QStringList entryList() не возвращает список файлов?
Записан
garryHotDog
Гость
« Ответ #6 : Май 14, 2010, 16:39 »

Цитировать
Ты хочешь сказать, что QStringList entryList() не возвращает список файлов?
с чего ты это решил??? с какой фразы???

в моем примере я просто использую tmpFileList=dir.entryInfoList(QDir::Files|QDir::Readable,QDir::NoSort), получаю список файлов,но элементы списка не просто имена файлов,а QFileInfo!!!
Записан
Kolobok
Гость
« Ответ #7 : Май 14, 2010, 18:37 »

с чего ты это решил??? с какой фразы???

Цитировать
Не только количество, но и названия файлов.
для этого есть QFileInfoList !!! это список файлов с доп. инфой (читай в ассисте)

В моем понимании, это означает, что метод entryList делает не совсем то, что я написал или метод QFileInfoList эффективнее.
Записан
garryHotDog
Гость
« Ответ #8 : Май 14, 2010, 20:31 »

Цитировать
В моем понимании, это означает, что метод entryList делает не совсем то, что я написал или метод QFileInfoList эффективнее.

Цитирую для тебя ассист:
Цитировать
QStringList   entryList ( Filters filters = NoFilter, SortFlags sort = NoSort ) const
Цитировать
QFileInfoList   entryInfoList ( Filters filters = NoFilter, SortFlags sort = NoSort ) const

Цитировать
typedef QFileInfoList
Synonym for QList<QFileInfo>.
поясню - entryList вернем тебе просто список имен файлов в директории.
entryInfoList - вернем тебе список элементов QFileInfo, где есть и имя и размер и т.д......

более эффективным будет entryList !!!!
Записан
Kolobok
Гость
« Ответ #9 : Май 14, 2010, 20:39 »

Ну ик чему был тогда этот комментарий?

Цитировать
Не только количество, но и названия файлов.
для этого есть QFileInfoList !!! это список файлов с доп. инфой (читай в ассисте)


Записан
garryHotDog
Гость
« Ответ #10 : Май 14, 2010, 21:06 »

МОЖНО ПОЛУЧИТЬ ИМЕНА,КОЛИЧЕСТВО И Т.Д.
я думаю автор топика понял как делать!?
Записан
Herr
Гость
« Ответ #11 : Май 15, 2010, 00:08 »

Да, спасибо!
Записан
Kolobok
Гость
« Ответ #12 : Май 15, 2010, 00:48 »

Вот как раз т.д автор топика не просил. И не надо на меня кричать.
Записан
ритт
Гость
« Ответ #13 : Май 15, 2010, 17:06 »

Цитировать
В моем понимании, это означает, что метод entryList делает не совсем то, что я написал или метод QFileInfoList эффективнее.

Цитирую для тебя ассист:
Цитировать
QStringList   entryList ( Filters filters = NoFilter, SortFlags sort = NoSort ) const
Цитировать
QFileInfoList   entryInfoList ( Filters filters = NoFilter, SortFlags sort = NoSort ) const

Цитировать
typedef QFileInfoList
Synonym for QList<QFileInfo>.
поясню - entryList вернем тебе просто список имен файлов в директории.
entryInfoList - вернем тебе список элементов QFileInfo, где есть и имя и размер и т.д......

более эффективным будет entryList !!!!
более эффективным будет entryInfoList(), но памяти сожрёт чуть больше. entryList() оправдан лишь там, где требуются только имена файлов и в дльнейшем нет необходимости получения по этим именам абсолютного/канонического пути, метаинформации, развязывания ссылок и т.п.
Записан
Kolobok
Гость
« Ответ #14 : Май 15, 2010, 19:26 »

более эффективным будет entryInfoList(), но памяти сожрёт чуть больше.

У меня по скорости они одинаковы.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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