Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
viramir
0 / 0 / 1
Регистрация: 04.05.2016
Сообщений: 150
#1

Выбор случайного файла - C++ Builder

28.10.2017, 19:07. Просмотров 197. Ответов 7
Метки нет (Все метки)

мне нужна фунция которая через FindFirst/Next выводит случайное имя файла
например
C++
1
FileFind("*.dic");
выводит имя случайного dic файла
http://www.cyberforum.ru/cpp-builder/thread570085.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2017, 19:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выбор случайного файла (C++ Builder):

Выбор вопросов из файла
делаю экспертную систему.сечас у еня вопросы забиты в программе.вот пример if...

OpenDialog: выбор папки, а не файла
Добрый вечер еще раз! Вот у меня такая ситуация: Для...

Выбор файла, только txt.
Здравствуйте, для подключения файла к программе использую open dialog. Можно...

OpenPictureDialog - выбор файла и закрытие диалога
1. Для выбора файла в OpenPictureDialog нужно нажать два раза на открыть....

Выбор программы для открытия файла
Пишу программку которая работает с БД. В БД хранятся ссылки на всякие разные...

7
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25610 / 17163 / 6825
Регистрация: 22.10.2011
Сообщений: 30,360
Записей в блоге: 6
28.10.2017, 22:27 #2
Получаешь список всех файлов с нужным расширением в нужной папке, и выбираешь из них один, случайно:

C++
1
2
3
4
5
6
#include <System.IOUtils.hpp>
// ...
 
    TStringDynArray Files;
    Files = TDirectory::GetFiles("C:\\__Volvo", "*.dic", TSearchOption::soTopDirectoryOnly);
    ShowMessage(Files[Random(Files.Length)]);
(работает на RAD 2009 и выше)
2
viramir
0 / 0 / 1
Регистрация: 04.05.2016
Сообщений: 150
02.11.2017, 20:46  [ТС] #3
Цитата Сообщение от volvo Посмотреть сообщение
Получаешь список всех файлов с нужным расширением в нужной папке, и выбираешь из них один, случайно:

C++
1
2
3
4
5
6
#include <System.IOUtils.hpp>
// ...
 
    TStringDynArray Files;
    Files = TDirectory::GetFiles("C:\\__Volvo", "*.dic", TSearchOption::soTopDirectoryOnly);
    ShowMessage(Files[Random(Files.Length)]);
(работает на RAD 2009 и выше)
а мне надо с использованием WinAPI и FindFirstFile и FindNextFile
0
Si14
31 / 31 / 25
Регистрация: 26.07.2015
Сообщений: 76
03.11.2017, 10:37 #4
Тогда так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int iAttributes = faAnyFile;
TSearchRec sr;
AnsiString PathAndExt = "C:\\*.dic";
TStringList *FileList = new TStringList;
 
randomize();
if (FindFirst(PathAndExt, iAttributes, sr) == 0)
{
        do
        {
                FileList->Add(sr.Name);
        }
        while ( FindNext(sr) == 0 );
        FindClose(sr);
}
int idx = random(FileList->Count);
AnsiString Rezult = FileList->Strings[idx];
delete FileList;
1
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25610 / 17163 / 6825
Регистрация: 22.10.2011
Сообщений: 30,360
Записей в блоге: 6
03.11.2017, 10:47 #5
Цитата Сообщение от viramir Посмотреть сообщение
а мне надо с использованием WinAPI и FindFirstFile и FindNextFile
Значит, вопрос надо было задавать в форуме WinAPI, чего ты все время в Билдер лезешь, если тебе его функционал не нужен?
0
viramir
0 / 0 / 1
Регистрация: 04.05.2016
Сообщений: 150
03.11.2017, 11:12  [ТС] #6
Цитата Сообщение от volvo Посмотреть сообщение
Значит, вопрос надо было задавать в форуме WinAPI, чего ты все время в Билдер лезешь, если тебе его функционал не нужен?
Я лезу в билдер тк я с ним работаю.Но люблю API
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25610 / 17163 / 6825
Регистрация: 22.10.2011
Сообщений: 30,360
Записей в блоге: 6
03.11.2017, 11:43 #7
Цитата Сообщение от Si14 Посмотреть сообщение
Тогда так:
Нет, ребята. Все по-взрослому тогда уже. WinAPI - так WinAPI, никаких StringList-ов, никаких AnsiString-ов. Работайте с char*... Или уже не выделывайтесь, и используйте нормальные средства, которые предоставляют выбранные для разработки среда/компилятор.
Цитата Сообщение от viramir Посмотреть сообщение
Но люблю API
Любил бы - умел бы сам делать те вещи, о которых просишь. Это - азбука для WinAPI-программиста, потому что никаких других средств для перебора всех файлов в папке там нет. А то, что я вижу здесь - это чистой воды извращение: использовать WinAPI в Билдере, который позволяет сделать тремя строками то, что записано выше в 18 строк - да ради чего? Этот код что, будет быстрее моего работать? Не будет. Он даст меньший исполнимый код? Возможно но при использовании других средств Билдера, таких как StringList-ы это не будет заметно в общей массе, вот если бы весь проект целиком писался на WinAPI (и компилировался бы более эффективным компилятором) - тогда было бы заметно. Он что, более поддерживаемый? Нет, чем больше строк - тем сложнее поддержка. Он что, более универсальный? Нет. Изменением одного параметра:
C++
1
Files = TDirectory::GetFiles("C:\\__Volvo", "*.dic", TSearchOption::soAllDirectories);
я заставлю приложение находить .dic-файлы во всех вложенных подпапках. Тебе для этого придется выносить код в отдельную функцию и вызывать ее рекурсивно. Более того, GetFiles - кроссплатформенная, а не прибитая гвоздями к Windows, как вышеприведенный код. И когда понадобится перенести приложение на другую ОС - это очень сократит время переноса, переделывать придется только задание самого пути, все остальное останется без изменений. Про вышеприведенный код я молчу, заставить его работать на том же Андроиде вообще нереально...

Итак, повторяю вопрос: ради чего использовать WinAPI?
1
viramir
0 / 0 / 1
Регистрация: 04.05.2016
Сообщений: 150
03.11.2017, 11:47  [ТС] #8
Цитата Сообщение от volvo Посмотреть сообщение
Нет, ребята. Все по-взрослому тогда уже. WinAPI - так WinAPI, никаких StringList-ов, никаких AnsiString-ов. Работайте с char*... Или уже не выделывайтесь, и используйте нормальные средства, которые предоставляют выбранные для разработки среда/компилятор.
Любил бы - умел бы сам делать те вещи, о которых просишь. Это - азбука для WinAPI-программиста, потому что никаких других средств для перебора всех файлов в папке там нет. А то, что я вижу здесь - это чистой воды извращение: использовать WinAPI в Билдере, который позволяет сделать тремя строками то, что записано выше в 18 строк - да ради чего? Этот код что, будет быстрее моего работать? Не будет. Он даст меньший исполнимый код? Возможно но при использовании других средств Билдера, таких как StringList-ы это не будет заметно в общей массе, вот если бы весь проект целиком писался на WinAPI (и компилировался бы более эффективным компилятором) - тогда было бы заметно. Он что, более поддерживаемый? Нет, чем больше строк - тем сложнее поддержка. Он что, более универсальный? Нет. Изменением одного параметра:
C++
1
Files = TDirectory::GetFiles("C:\\__Volvo", "*.dic", TSearchOption::soAllDirectories);
я заставлю приложение находить .dic-файлы во всех вложенных подпапках. Тебе для этого придется выносить код в отдельную функцию и вызывать ее рекурсивно. Более того, GetFiles - кроссплатформенная, а не прибитая гвоздями к Windows, как вышеприведенный код. И когда понадобится перенести приложение на другую ОС - это очень сократит время переноса, переделывать придется только задание самого пути, все остальное останется без изменений. Про вышеприведенный код я молчу, заставить его работать на том же Андроиде вообще нереально...

Итак, повторяю вопрос: ради чего использовать WinAPI?
Потому что не работает то что было раньше
0
03.11.2017, 11:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.11.2017, 11:47
Привет! Вот еще темы с решениями:

Выбор текстового файла для считывания из него
Здравствуйте! Подскажите, пожалуйста, каким образом можно открыть нужный файл...

OpenFileDialog - выбор и открытие файла с расширением exe
Вообщем есть две кнопки Button и один openDialog, первая кнопка обращается к...

Как установить выбор только одного заранее заданного файла в OpenDialog?
Можно ли сделать так, что-бы openStuff открывал определённый файл (без...

Генератор случайного числа
Написал функцию генерации случайного числа в диапазоне от 0 до n-1 #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru