Форум программистов, компьютерный форум, киберфорум
C++/CLI Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.11.2019
Сообщений: 6

Вывод информации о файлах в Chart

28.11.2019, 20:13. Показов 1048. Ответов 2

Студворк — интернет-сервис помощи студентам
Есть у меня код, который получает все файлы в одном каталоге и выводит некоторую информацию о них в datagridview.
Дали мне задание привести эти данные в виде круговой(секторной) диаграммы и посоветовали делать это через chart.
Вообщем сектор должен зависеть от типа файла и их количества в этом каталоге
Как лучше это оформить?
И как работать с Chart и добавлять туда элементы
P.S. папки ищу через WinAPI
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
void FindFiles(char* strParentFolder)
           {
               dataGridView1->Rows->Clear();
               ULONGLONG nFileLen;
               SYSTEMTIME time;
               // в данной структуре хранятся результаты поиска
               WIN32_FIND_DATAA objFindFileData;
               // создаем handle для поиска
               char strSearchPath[1024];
               strcpy(strSearchPath, strParentFolder);
               strcat(strSearchPath, "\\*");
               HANDLE hSearchHandle = FindFirstFileA(strSearchPath, &objFindFileData);
               do
               {
                   // найденный объект является файлом
                   if (!(objFindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
                   {
                       // ищем внутри найденной папки (все папке кроме . и .. - иначе произойдет зацикливание
                       if ((strcmp(objFindFileData.cFileName, ".") != 0) && (strcmp(objFindFileData.cFileName, "..") != 0))
                       {
                           FileTimeToLocalFileTime(&objFindFileData.ftLastWriteTime, &objFindFileData.ftLastWriteTime);
                           FileTimeToSystemTime(&objFindFileData.ftLastWriteTime, &time);
                           if (mb)
                               nFileLen = (((objFindFileData.nFileSizeHigh * 4294967296) + objFindFileData.nFileSizeLow)) * 0.001 * 0.0009765625;
                           else
                               nFileLen = (((objFindFileData.nFileSizeHigh * 4294967296) + objFindFileData.nFileSizeLow)) * 0.001;
                           dataGridView1->Rows->Add(gcnew System::String(objFindFileData.cFileName), nFileLen, time.wDay+"/"+ time.wMonth + "/" + time.wYear + " " + time.wHour + ":" + time.wMinute);
                        
                       }
                   }    
              } while (FindNextFileA(hSearchHandle, &objFindFileData));
               // закрываем handle
               FindClose(hSearchHandle);
 
           }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2019, 20:13
Ответы с готовыми решениями:

Вывод информации о файлах
можна ли отобразить инфу о файлах в папке в виде таблицы, например в таком виде

Вывод информации о файлах в каталоге
Добрый день. Возникла проблема с написанием аналога утилиты ls для Linux. Функция stat() по каким-то причинам возвращает неверные данные. ...

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

2
 Аватар для Sklifosofsky
1086 / 916 / 213
Регистрация: 29.09.2015
Сообщений: 1,019
28.11.2019, 21:45
1. Сперва переделайте функцию так, что бы она выдавала список только файлов в массиве
2. Создайте функцию, которая перебирает массив и выполняет подсчет требуемых данных в массив структуры (расширение, количество)
3. Обработать массив структур и вывести в Chart. Chart хорош тем, что там не нужно выполнять вычисления для ввода. Просто вводите фактическое количество, а Chart сам распределит и нарисует диаграмму.

Замечу. вы используете API методы для однобайтных кодировок текста FindFirstFileA, WIN32_FIND_DATAA и т.д.. Лучше всё-таки использовать по умолчанию FindFirstFileW, … двухбайтные для юникода.
1
0 / 0 / 0
Регистрация: 18.11.2019
Сообщений: 6
02.12.2019, 22:53  [ТС]
Цитата Сообщение от Sklifosofsky Посмотреть сообщение
1. Сперва переделайте функцию так, что бы она выдавала список только файлов в массиве
2. Создайте функцию, которая перебирает массив и выполняет подсчет требуемых данных в массив структуры (расширение, количество)
3. Обработать массив структур и вывести в Chart. Chart хорош тем, что там не нужно выполнять вычисления для ввода. Просто вводите фактическое количество, а Chart сам распределит и нарисует диаграмму.

Замечу. вы используете API методы для однобайтных кодировок текста FindFirstFileA, WIN32_FIND_DATAA и т.д.. Лучше всё-таки использовать по умолчанию FindFirstFileW, … двухбайтные для юникода.
FindFirstFileA, WIN32_FIND_DATAA использую ибо работает) с FindFirstFileW и FindFirstFile вечно выдает ошибки про W_char вроде LPCSTR(точно уже не помню).
Собственно про запись в список, а потом его обход я тоже думал.
Еще 1 вопрос с добавлением элементов в Chart нашел такой вариант

chart1->Series["Files"]->Points->AddXY("Название файла/расширение", занимаемое место/количество таких файлов);
И у меня получается, как на скрине. Мне же нужно, что бы в легенде все так и осталось(цвет и название файла ну или расширение) а на самой диаграмме вместо названия выводилось занимаемое место или количество таких файлов. Где покрутить настройки для этого?

Так же интересует вопрос, как можно приплюсовывать значение для определенного названия/типа.
Например: у меня диаграмма уже готовая и мне к количеству файлов типа "PNG" нужно добавить +1?
В моем понимание должно быть то-то похоже на -> chart1->Series["Files"]->Points["PNG"]->(Y+1);
Надеюсь вопрос понятен!
Миниатюры
Вывод информации о файлах в Chart  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2019, 22:53
Помогаю со студенческими работами здесь

Исправить вывод информации о файлах
Здраствуйте, такая ситуация. В заданной папке есть 10 файлов например, и есть массив: struct stFilesInfo { const char* szParamName; ...

Вывод в файл информации о всех имеющихся в заданной директории исполняемых файлах
Всем привет. Имеется задание: Разработать пакетный файл для вывода информации в файл о всех имеющихся исполняемых файлах в заданном...

Вывод информации об определённых файлах из заданной директории в обратном алфавитном порядке имён этих файлов
Здравствуйте. Нужно создать пакетный файл, который будет выводить информацию о какой либо директории, записывать эту информацию в файл, а...

Получение информации о файлах
Есть на компьютере заданный каталог, куда записываются файлы (файлов довольно много). Необходимо получить последний по времени создания...

Загрузка информации о файлах в ListView
Привет! на форме есть компонент ListView (vsReport) кнопка Button и OpenDialog...как программно загрузить файлы из определенного источника...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru