Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157
1

Простой файловый браузер

03.10.2014, 18:26. Показов 2004. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Задание такое :
Для выбранной пользователем папки реализовать вывод на экран список файлов в данной папке. По нажатию кнопки скрывать/показывать скрытые/системный файлы.

Сделал вывод через FilesListBox. Но это думаю не правильно.
1.Через какие функции можно сделать вывод папки?
2. Каким образом скрывать/показывать системные файлы? (Как я понимаю, функции SetFileAttributes и GetFileAttributes).

Каким образом это можно реализовать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2014, 18:26
Ответы с готовыми решениями:

Простой файловый менеджер
Нужно сделать не очень накрученную файловую систему. Скрин приложил, как у меня это выглядит. ...

Простой файловый менеджер
Здравствуйте! Не так давно начала изучать С++ с помощью Qt, писала маленькие программы, в...

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

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

9
4043 / 2332 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.10.2014, 18:36 2
Например, вот:
Пользовательская оболочка
Файловый менеджер, какие компоненты использовать
Удаление скрытых файлов
0
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157
03.10.2014, 19:46  [ТС] 3
BRcr, Больно много всего. Не могу понять в какую сторону и двигаться.

Добавлено через 49 минут
Ну вот, например открытие файлов. Как теперь делать проверку на атрибуты функциями (SetFileAttributes и GetFileAttributes) .


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
#pragma hdrstop
 
#include "Unit1.h"
#include <FileCtrl.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
HANDLE hFile_find;
WIN32_FIND_DATA lpffd;
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SetCurrentDirectory(Edit1->Text.c_str());
 
hFile_find=FindFirstFile("*.*",&lpffd);
if (hFile_find!=INVALID_HANDLE_VALUE)
 ListBox1->Items->Append(lpffd.cFileName);
while (FindNextFile(hFile_find,&lpffd))
ListBox1->Items->Append(lpffd.cFileName);
FindClose(hFile_find);
}
Миниатюры
Простой файловый браузер  
0
Эксперт С++
8482 / 6149 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
03.10.2014, 20:28 4
Лучший ответ Сообщение было отмечено DeadZone как решение

Решение

Цитата Сообщение от DeadZone Посмотреть сообщение
Не могу понять в какую сторону и двигаться.
Главное не оставаться в темной зоне )

А вообще в сторону TTreeView+TListView + FindFirst()/FindNext()
1
Модератор
9459 / 6212 / 2420
Регистрация: 21.01.2014
Сообщений: 26,485
Записей в блоге: 3
04.10.2014, 08:54 5
Лучший ответ Сообщение было отмечено DeadZone как решение

Решение

Используя материалы вот этой темы придумалась такая вот штука...


*.h
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
#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ComCtrls.hpp>
#include <Vcl.ImgList.hpp>
#include <Vcl.Grids.hpp>
#include <Vcl.Outline.hpp>
#include <Vcl.Samples.DirOutln.hpp>
//---------------------------------------------------------------------------
class TForm2 : public TForm
{
__published:    // IDE-managed Components
    TImageList *ImageList1;
    TTreeView *TreeView1;
    TStringGrid *StringGrid1;
    TCheckBox *CheckBox1;
    void __fastcall TreeView1Expanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion);
    void __fastcall FormCreate(TObject *Sender);
    void __fastcall CheckBox1Click(TObject *Sender);
private:    // User declarations
    int Attrib;
    String dir;
    void __fastcall MakeFullDirectoryTree(TTreeView *Tree, const String &Dir);
    void __fastcall EnumDirectories(String path, TTreeNode *parent, int level);
public:     // User declarations
    __fastcall TForm2(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif

*.cpp
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include <vcl.h>
#pragma hdrstop
 
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
 
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::EnumDirectories(String path, TTreeNode *parent, int level)
{
  TreeView1->Images = ImageList1;
  TTreeView *Tree = (TTreeView *)parent->TreeView;
  TTreeNode *tmp_node;
  int nfile = 0;
  int CurrentRow = 1;
  if(level == 0)
    {
      TSearchRec sr;
      if(path[path.Length()] != '\\')
        path += "\\";
      if(FindFirst(path + "*.*", Attrib, sr) == 0)
        {
          do
            {
              if((sr.Attr & faDirectory ) != 0)
                {
                  if((sr.Name == ".") || (sr.Name == ".."))
                    continue;
                  tmp_node = Tree->Items->AddChildFirst(parent, sr.Name);
                  tmp_node->ImageIndex = 0;
                  tmp_node->SelectedIndex = 0;
                  nfile++;
                  EnumDirectories(path + sr.Name, tmp_node, level + 1);
                  continue;
                }
              else
                {
                  StringGrid1->Cells[0][CurrentRow] = sr.Name;
                  StringGrid1->Cells[1][CurrentRow] = IntToStr(sr.Size);
                  StringGrid1->Cells[2][CurrentRow] = DateTimeToStr(sr.TimeStamp);
                  StringGrid1->RowCount++;
                  CurrentRow = StringGrid1->RowCount - StringGrid1->FixedRows;
                  nfile++;
                }
            }
          while(FindNext(sr) == 0);
          FindClose(sr);
        }
      Application->ProcessMessages();
    }
  if(nfile == 0 && level == 1)
    {
      tmp_node = Tree->Items->AddChild(parent, "Пусто");
      tmp_node->ImageIndex = 2;
      tmp_node->SelectedIndex = 2;
    }
}
//---------------------------------------------------------------------------
void __fastcall TForm2::MakeFullDirectoryTree(TTreeView *Tree, const String &Dir)
{
  TTreeNode *tmp_node;
  Tree->Items->Clear();
  if(!DirectoryExists(Dir))
    return;
  //Сделаем корень дерева
  Tree->Items->Add(NULL, Dir);
  tmp_node = Tree->Items->Item[0];
  tmp_node->ImageIndex = 1;
  tmp_node->SelectedIndex = 1;
  //Укороченный прогон по директории
  EnumDirectories(Dir, tmp_node, 1);
  Tree->AutoExpand = true;
  Tree->Selected = tmp_node;
  Tree->AutoExpand = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::TreeView1Expanding(TObject *Sender, TTreeNode *Node, bool &AllowExpansion)
{
  String path = Node->Text;
  TTreeNode *tmp_node = Node;
  while(tmp_node->Parent)
    {
      tmp_node = tmp_node->Parent;
      if(tmp_node->Text[tmp_node->Text.Length()] != '\\')
        path = tmp_node->Text + "\\" + path;
      else
        path = tmp_node->Text + path;
    }
  Node -> DeleteChildren();
  StringGrid1->RowCount = 2;
  for(int i = 0; i < StringGrid1->ColCount; i++)
   StringGrid1->Cells[i][1] = "";
  EnumDirectories(path, Node, 0);
  Node -> AlphaSort();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormCreate(TObject *Sender)
{
  dir = "c:\\";
  MakeFullDirectoryTree(TreeView1, dir);
  Attrib = faAnyFile;
  StringGrid1->Cells[0][0] = "Имя файла";
  StringGrid1->Cells[1][0] = "Размер файла";
  StringGrid1->Cells[2][0] = "Дата файла";
}
//---------------------------------------------------------------------------
void __fastcall TForm2::CheckBox1Click(TObject *Sender)
{
  if(CheckBox1->Checked) Attrib = faAnyFile;
  else Attrib = faAnyFile - faHidden;
  MakeFullDirectoryTree(TreeView1, dir);
}
//---------------------------------------------------------------------------
Миниатюры
Простой файловый браузер   Простой файловый браузер  
3
3 / 3 / 1
Регистрация: 03.10.2009
Сообщений: 157
04.10.2014, 22:32  [ТС] 6
D1973, Спасибо. Я сделал простенько все, но все равно спасибо Вам большое.
0
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 2
30.12.2016, 03:04 7
Это все хорошо. Но как по итогу файлы-то скрыть?
0
Модератор
9459 / 6212 / 2420
Регистрация: 21.01.2014
Сообщений: 26,485
Записей в блоге: 3
30.12.2016, 06:37 8
Yahaa, что не понятно? Код перед тобой: читай, разбирайся.
0
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 2
30.12.2016, 09:51 9
D1973, Спасибо. Я сделал простенько все, но все равно спасибо Вам большое.


в этом сообщении я кода не нашел, а в Вашем коде я нифига не понимаю.
0
Модератор
9459 / 6212 / 2420
Регистрация: 21.01.2014
Сообщений: 26,485
Записей в блоге: 3
31.12.2016, 08:33 10
Цитата Сообщение от Yahaa Посмотреть сообщение
а в Вашем коде я нифига не понимаю
Это моя проблема?
2
31.12.2016, 08:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.12.2016, 08:33
Помогаю со студенческими работами здесь

Подскажите простой файловый менеджер
Столько много навороченных файловых менеджеров, что теряюсь с выбором, главное, чтоб был простой с...

Простой файловый сервер с Web GUI
Задача поднять простейший файловый сервер с web доступом и сделать это минимальным количеством...

Визуализация сортировки файлов (простой файловый менеджер)
Здравствуйте. Только изучаю Qt и пишу простой файловый менеджер. Сделал вывод папок, файлов и...

Простой браузер Android
Пытаюсь создать браузер. Код ниже: MainActivity package test.namespace; import...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru