Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/17: Рейтинг темы: голосов - 17, средняя оценка - 4.88
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
.NET 4.x

Отображение и управления папками и файлами внутри списка папок

22.10.2023, 20:19. Показов 4539. Ответов 47
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Нужен элемент или набор элементов чтобы организовать вывод и управление папками и файлами внутри списка папок проекта.
Список папок проекта это список объектов класса хранящих имя проекта и полный путь до папки проекта.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Serializable]
public class SFNPath
{
    public string Name { get; set; }
    public string Path { get; set; }
 
    [JsonConstructor]
    public SFNPath()
    {
        Name = "";
        Path = "";
    }
 
    public SFNPath(string name, string path)
    {
        Name = name;
        Path = path;
    }
}
...
public List<SFNPath> AllDirProjects
По поводу управление то это мини проводник без всех параметров проводника но с его контекстным меню. А следовательно нужна возможность нескольких выделений папок и файлов.
К слову за пределы папки с проектом нельзя должно быть выходить только в пределах списка папок с проектами тобишь они и то что в них.
Подскажите пожалуйста какой элемент для этого взять. Хорошо бы отображение делать в виде дерева но TreeView во первых не даёт делать выделение нескольких элементов а во вторых не очень предназначен для хранения большого количества элементов в том плане что обновление например при переименовании и удалении будет происходить очень долго.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2023, 20:19
Ответы с готовыми решениями:

Процедура удаления папок со вложенными файлами и папками
помогите написать процедуру удаления папок со вложенными файлами и папками

Нужен скрипт перемещения нужных папок с файлами внутри
Здравствуйте, есть папки Telegram (1), Telegram (2)... идущие по порядку. В каждой из них находится папка tdata с разными папками и...

Отображение списка файлов и папок в каталоге.
Некорректно работает программа. Вот кусок кода, отвечающий за вывод списка файлов и папок в папке. HANDLE Search; WIN32_FIND_DATAA...

47
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,762
Записей в блоге: 4
16.08.2024, 08:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
C#
1
public List<SFNPathInfo> AllDirProjects
Вам же сказали какого типа коллекцию тут использовать... Но вы упираетесь...BindingList<T> при своём изменении (Add(), Remove()) сама обновит UI при правильной настройке привязки... И свойство должно быть только для чтения - get...
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
16.08.2024, 12:06  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Вам же сказали какого типа коллекцию тут использовать... Но вы упираетесь...BindingList<T> при своём изменении (Add(), Remove()) сама обновит UI при правильной настройке привязки... И свойство должно быть только для чтения - get...
Я и заменил List на BindingList.
Структура данных:
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
    [Serializable]
    public class SFNPath
    {
        public string Text { get; set; }
        public string FullName { get; set; }
 
        [JsonIgnore]
        public bool IsDir { get => Directory.Exists(FullName); }
        [JsonIgnore]
        public bool IsFile { get => File.Exists(FullName); }
 
        [JsonIgnore]
        public string Name { get => Path.GetFileName(FullName); }
        [JsonIgnore]
        public string NameWithoutExtension { get => IsFile ? Path.GetFileNameWithoutExtension(FullName) : Name; }
        [JsonIgnore]
        public string Ext { get => Path.GetExtension(FullName); }
        [JsonIgnore]
        public string DirectoryFullName { get => IsFile ? Path.GetDirectoryName(FullName) : FullName; }
 
        [JsonConstructor]
        public SFNPath()
        {
            Text = "";
            FullName = "";
        }
 
        public SFNPath(string text, string fullName)
        {
            Text = text;
            FullName = fullName;
        }
    }
 
    public class SFNPathInfo: SFNPath
    {
        private BindingList<SFNPathInfo> _pathList;
 
        private SFNPathInfo _parent;
 
        public SFNPathInfo(string text, string fullName)
        {
            Text = text;
            FullName = fullName;
            _pathList = null;
            _parent = null;
 
        }
 
        public SFNPathInfo(SFNPathInfo parent, string text, string fullName)
        {
            Text = text;
            FullName = fullName;
            _pathList = null;
            _parent = parent;
        }
 
        public SFNPathInfo Parent { get => _parent; }
 
        public SFNPathInfo RootParent
        { 
            get
            {
                var prt = Parent;
                var prt2 = prt;
                while (prt != null)
                {
                    prt = prt.Parent;
                    if (prt != null)
                        prt2 = prt;
                }
 
                if (prt2 == null) prt2 = this;
 
                return prt2;
            }
        }
 
        public bool IsRoot => Parent == null;
 
        public BindingList<SFNPathInfo> PathList
        {
            get
            {
                if (_pathList != null)
                {
                    return _pathList;
                }
 
                if (IsFile)
                {
                    return new BindingList<SFNPathInfo>();
                }
                else if (IsDir)
                {
                    _pathList = new BindingList<SFNPathInfo>(Directory.GetFileSystemEntries(FullName)
                    .Select(filePath => new SFNPathInfo(this, Path.GetFileName(filePath), filePath)).ToList());
                }
 
                return _pathList;
            }
        }
 
        public RPGMakerType Type
        {
            get
            {
                var id = Array.IndexOf(RPGMakerParam.RPGMakerExt, Ext);
                return id >= 0 ? ((RPGMakerType)((byte)id)) : RPGMakerType.None;
            }
        }
 
        public SFNPathInfo GetProjectFile(RPGMakerType type)
        {
            var rootPath = RootParent;
            BindingList<SFNPathInfo> fns = new BindingList<SFNPathInfo>();
            for (var i = 1; i < RPGMakerParam.RPGMakerExt.Length; i++)
            {
                fns = RootParent.PathList;
                if (fns.Count > 0)
                    break;
            }
 
            SFNPathInfo retFN = null;
 
            foreach (var fn in fns)
            {
                if (fn.IsDir) continue;
 
                if (type == RPGMakerParam.GetRMTypeExt(fn.Ext))
                {
                    retFN = fn;
                }
            }
 
            return retFN;
        }
 
        public bool CreatePDLCPath()
        {
            if (IsDir && !IsPDLCPath)
            {
                Directory.CreateDirectory(Path.Combine(FullName, "PDLC"));
                return true;
            }
            else return false;
        }
 
        private string TypeTextExt
        {
            get => Type == RPGMakerType.None ? Ext : RPGMakerParam.RPGMakerNames[(byte)Type];
        }
 
        public string TypeText { get => IsDir ? Languages.TX_DIR : IsFile ? TypeTextExt : Languages.TX_UNKNOWN; }
 
 
        public bool IsPDLCPath
        {
            get => IsDir ? Directory.Exists(Path.Combine(FullName, "PDLC")) ? true : false : false;
        }
 
        public int CountDirs
        {
            get => _pathList == null ? 0 : _pathList.Select(x => x.IsDir).Count();
        }
 
        public int CountFiles
        {
            get => _pathList == null ? 0 : _pathList.Select(x => x.IsFile).Count();
        }
 
        public int CountData
        {
            get => _pathList == null ? 0 : _pathList.Count();
        }
    }
Получение данных:
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
        [JsonIgnore]
        public BindingList<SFNPathInfo> GetProjectsFromPaths
        {
            get
            {
                var list = new List<SFNPathInfo>();
 
                if (PathsProjects.Count > 0)
                {
                    foreach (var project in PathsProjects)
                    {
                        var coredir = new DirectoryInfo(project.FullName);
                        var dirs = coredir.GetDirectories();
                        if (dirs.Length > 0)
                        {
                            foreach (var dir in dirs)
                            {
                                var countFiles = dir.GetFiles($"*{RPGMakerParam.RPGMakerExt[(byte)Type]}").Length;
 
                                if (countFiles <= 0)
                                    continue;
 
                                list.Add(new SFNPathInfo($"{project.Text} > {dir.Name}", dir.FullName));
                            }
                        }
                    }
                }
 
                return new BindingList<SFNPathInfo>(list);
            }
        }
 
        [JsonIgnore]
        public BindingList<SFNPathInfo> GetProjects
        {
            get {
                var list = new List<SFNPathInfo>();
 
                if (Projects.Count > 0)
                {
                    foreach (var dir in Projects)
                    {
                        var path = dir.DirectoryFullName;
                        var countFiles = Directory.GetFiles(path, $"*{RPGMakerParam.RPGMakerExt[(byte)Type]}").Length;
 
                        if (countFiles <= 0)
                            continue;
 
                        list.Add(new SFNPathInfo(dir.Text, path));
                    }
                }
 
                return new BindingList<SFNPathInfo>(list);
            }
        }
 
        [JsonIgnore]
        public BindingList<SFNPathInfo> AllDirProjects
        {
            get
            {
                var list = new List<SFNPathInfo>();
 
                list.AddRange(GetProjectsFromPaths);
                list.AddRange(GetProjects);
 
                return new BindingList<SFNPathInfo>(list);
            }
        }
Вывод джанных:
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
private readonly TypedObjectListView<SFNPathInfo> _tptvFilesystem;
private readonly TypedColumn<SFNPathInfo> _tpcolName;
 
//private ShellContextMenu ctxMnu = new ShellContextMenu();
 
private bool IsRefreshProjects = false;
 
private void InitNodeProjects()
{
    if (CountEngineProjects > 0)
    {
 
        treeListViewProjectData.CanExpandGetter = obj => ((SFNPathInfo)obj).IsDir;
        treeListViewProjectData.ChildrenGetter = obj =>
        {
            try
            {
                return ((SFNPathInfo)obj).PathList;
            }
            catch (UnauthorizedAccessException ex)
            {
                // on error (e.g. restricted system dirs) show message box and collapse the subtree allowing the user to retry later
                // we cannot do this immediately in this getter because TreeListView will not react correctly and may remain in undefined state
                // so we use BeginInvoke to execute it a bit later on the UI thread
                BeginInvoke(new Action(() =>
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    treeListViewProjectData.Collapse(obj);
                }));
                return new BindingList<SFNPathInfo>();
            }
        };
 
        treeListViewProjectData.ParentGetter = obj => ((SFNPathInfo)obj).Parent;
        treeListViewProjectData.Roots = SelectEngine.AllDirProjects;
        _tpcolName.ImageGetter = GetIconKey;
 
        RefreshNodeProjects();
    }
    else
    {
        treeListViewProjectData.Roots = null;
    }
}
 
private void RefreshNodeProjects()
{
    IsRefreshProjects = true;
 
    treeListViewProjectData.RebuildAll(true);
 
    SelectFileInListViewProjectData();
 
    pnlInfo.ScrollToRight();
 
    IsRefreshProjects = false;
}
 
// загрузка иконки файла через WinApi и сохранение в imglstIcons
private string GetIconKey(SFNPathInfo fsItem)
{
    if (fsItem.IsDir)
        return "explorer.png";
    else
    {
        string key = $"F{fsItem.Ext}";
 
        if (File.Exists(fsItem.FullName))
        {
            AddImageToList(imageListProjects, key, System.Drawing.Icon.ExtractAssociatedIcon(fsItem.FullName));
            if (imageListProjects.Images.IndexOfKey(key) >= 0)
                return key;
            else
                return null;
        }
        else
        {
            var ind = imageListProjects.Images.IndexOfKey(key);
            if (ind >= 0)
                imageListProjects.Images.RemoveAt(ind);
            return null;
        }
    }
}
 
private void AddImageToList(ImageList imageList, string key, Icon icon)
{
    if (imageList.Images.IndexOfKey(key) < 0)
    {
        imageList.Images.Add(key, icon);
    }
}
 
private SFNPathInfo SelectedFile = null;
 
private Image GetImageSelectedFile()
{
    if (SelectedFile == null)
        return null;
 
    if (SelectedFile.IsDir)
    {
        var idx = imageListProjects.Images.IndexOfKey("explorer.png");
        return idx >= 0 ? imageListProjects.Images[idx] : null;
    }
    else if (SelectedFile.IsFile)
    {
        var idx = imageListProjects.Images.IndexOfKey($"F{SelectedFile.Ext}");
        return idx >= 0 ? imageListProjects.Images[idx] : null;
    }
    else return null;
}
 
private void SelectFileInListViewProjectData()
{
    SelectedFile = ((SFNPathInfo)treeListViewProjectData.SelectedObject);
    RefreshInfoSelectFile();
}
 
private void RefreshInfoSelectFile()
{
    if (SelectedFile != null)
    {
        if (!Directory.Exists(SelectedFile.FullName) && !File.Exists(SelectedFile.FullName))
            RefreshNodeProjects();
        else
        {
            toolStripButtonOpen.Image = GetImageSelectedFile();
            toolStripMenuItemDirFile.Enabled = true;
            showInExplorerToolStripMenuItem.Enabled = true;
            toolStripButtonOpen.Visible = toolStripButtonShowInExplorer.Visible = true;
            toolStripButtonOpenIn.Visible = (Gen.Settings.IsCountOtherProgramms && Gen.Settings.IsSelectOtherProgramm);
            labelSelectedProject.Text = Gen.GetTXSelectProject(SelectedFile.RootParent.Text);
            labelPathProject.Text = Gen.GetTXSelectProjectPath(SelectedFile.IsFile, SelectedFile.IsDir);
            copyLabelTextPathProject.Text = SelectedFile.FullName;
 
            toolStripMenuItemDirFile.Text = Gen.GetTXOpenDirFile(SelectedFile != null && SelectedFile.IsFile);
            toolStripMenuItemDirFile.Enabled = true;
        }
    }
    else
    {
        toolStripMenuItemDirFile.Enabled = false;
        showInExplorerToolStripMenuItem.Enabled = false;
        toolStripButtonOpen.Visible = toolStripButtonOpenIn.Visible = toolStripButtonShowInExplorer.Visible = false;
        labelSelectedProject.Text = Gen.GetTXSelectProject();
        labelPathProject.Text = Gen.GetTXSelectProjectPath(false, false);
        copyLabelTextPathProject.Text = "";
    }
 
    pnlInfo.ScrollToRight();
}
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,762
Записей в блоге: 4
16.08.2024, 12:15
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Я и заменил List на BindingList
А привязку к элементу UI правильно сделали?
Почитайте вот эту книгу и научитесь делать всё правильно...
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
16.08.2024, 14:31  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А привязку к элементу UI правильно сделали?
Почитайте вот эту книгу и научитесь делать всё правильно...
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
treeListViewProjectData.CanExpandGetter = obj => ((SFNPathInfo)obj).IsDir;
        treeListViewProjectData.ChildrenGetter = obj =>
        {
            try
            {
                return ((SFNPathInfo)obj).PathList;
            }
            catch (UnauthorizedAccessException ex)
            {
                // on error (e.g. restricted system dirs) show message box and collapse the subtree allowing the user to retry later
                // we cannot do this immediately in this getter because TreeListView will not react correctly and may remain in undefined state
                // so we use BeginInvoke to execute it a bit later on the UI thread
                BeginInvoke(new Action(() =>
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    treeListViewProjectData.Collapse(obj);
                }));
                return new BindingList<SFNPathInfo>();
            }
        };
 
        treeListViewProjectData.ParentGetter = obj => ((SFNPathInfo)obj).Parent;
        treeListViewProjectData.Roots = SelectEngine.AllDirProjects;
        _tpcolName.ImageGetter = GetIconKey;
Вот привязка данных. AllDirProjects получает все папки и файлы всех проектов что находятся в настройках программы.
0
478 / 241 / 74
Регистрация: 25.05.2012
Сообщений: 1,139
Записей в блоге: 1
16.08.2024, 17:01
Цитата Сообщение от Alexandr_7 Посмотреть сообщение
Вот привязка данных.
ну геттеры можно куда-нибудь в конструктор или в отдельный метод инициализации вынести.
По сути привязка это только строка 23.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
16.08.2024, 17:37  [ТС]
Цитата Сообщение от NewOrdered Посмотреть сообщение
ну геттеры можно куда-нибудь в конструктор или в отдельный метод инициализации вынести.
По сути привязка это только строка 23.
InitNodeProjects() по сути и является инициализатором который возникает при каждом смене движка из списка.
Кто то мне говорил пересоздавать Roots каждый раз когда происходит изменения с файлами тобишь переименование или удаление - не нужно.
Так вот я вижу что кокразтаки нужно ибо вызов RebuildAll не обновляет данные. Для обновления их заново получить надо с компьютера. Чего не выполняет метод RebuildAll или Refresh. Изменения в файлах могут производиться везде и не только в моей программе. В целом кдласс SFNPathInfo и создан исключительно для TreeListView чтобы получать доступ к файлу или папке вне зависимости где именно находится проект. Ну Лаунчер он и есть лаунчер.

Добавлено через 19 минут
Вот это вот работает как нужно:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private void RefreshNodeProjects()
{
    IsRefreshProjects = true;
 
    var selObj = treeListViewProjectData.SelectedObject;
    treeListViewProjectData.Roots = SelectEngine.AllDirProjects;
    treeListViewProjectData.SelectObject(selObj, true);
    treeListViewProjectData.RebuildAll(true);
 
    SelectFileInListViewProjectData();
 
    pnlInfo.ScrollToRight();
 
    IsRefreshProjects = false;
}
Но опять же выделение пропадает у ветвей. Тоесть на корневых папок выделение остаётся но у выетвей тоесть у папок или файлов в корневых пропадает.
Подозреваю дело в пере построении дерева но его нужно перестраивать иначе если файлы переименованы или удалены извне они не изменяются в моей программе.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
17.08.2024, 16:48  [ТС]
Короче может кто помочь с тем чтобы выделять объект после переопределения Roots. Всё равно это должно быть возможно.
необходимо делать выделения свойства Parent если объект отсутствует.
0
 Аватар для Alexandr_7
87 / 22 / 6
Регистрация: 29.12.2015
Сообщений: 1,904
19.08.2024, 05:24  [ТС]
Я немного тупой. Вернуть выделения ветви будет невозможно так как до открытия ветви выделенных данныфх существовать не будет.
Ну ладно. Обойдусь без возврата выделения. Но есть другой момент.
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
private void InitNodeProjects()
{
    if (CountEngineProjects > 0)
    {
        treeListViewProjectData.CanExpandGetter = obj => ((SFNPathInfo)obj).IsDir;
        treeListViewProjectData.ChildrenGetter = obj =>
        {
            try
            {
                return ((SFNPathInfo)obj).PathList;
            }
            catch (UnauthorizedAccessException ex)
            {
                // on error (e.g. restricted system dirs) show message box and collapse the subtree allowing the user to retry later
                // we cannot do this immediately in this getter because TreeListView will not react correctly and may remain in undefined state
                // so we use BeginInvoke to execute it a bit later on the UI thread
                BeginInvoke(new Action(() =>
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    treeListViewProjectData.Collapse(obj);
                }));
                return new BindingList<SFNPathInfo>();
            }
        };
 
        treeListViewProjectData.ParentGetter = obj => ((SFNPathInfo)obj).Parent;
        _tpcolName.ImageGetter = GetIconKey;
 
        RefreshNodeProjects();
    }
    else
    {
        treeListViewProjectData.Roots = null;
    }
}
Немного модифицировать нужно.
Во 1 есть недочет. Если в папки нет файлов то её по прежнему можно открыть. Если к CanExpandGetter добавить на проверку на наличие в папки файлов то это не работает так как pathlist на момент этого события тупо пустой.
И ещё при закрытии ветви нужно обнулять pathlist для экономии памяти.

Добавлено через 33 минуты
Ну недочёт я исправил таким образом добавив свойство
C#
1
2
3
4
public bool IsCountDataDir
{
    get => IsDir && (Directory.GetDirectories(FullName).Length > 0 || Directory.GetFiles(FullName).Length > 0);
}
Но вопрос по очистке Children и соответственно pathlist когда не открыт остаётся открытым. Я просто не нашел нужного события.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2024, 05:24

Отображение в ListBox списка найденных файлов и папок
Доброго времени суток. Столкнулся с таким вот отображением(рис.1). если поставить в параметр DisplayMemberPath=&quot;Name&quot;, то...

Отображение списка текстовых файлов внутри программы
Всем привет. Нужна помощь. В делфи не силен (полный 0). Хочу сделать программу которая будет выдавать список текстовых документов и...

Создание папок с несколькими вложенными папками по названию в ячейки
Добрый день. Мне нужна помощь в создании макроса. Исходные данные такие: Есть несколько столбиков. В первом столбике прописаны...

Разработка подсистемы управления файлами со способом физической организации файла в виде связанного списка блоков
Помогите пожалуйста написать код, на Python, на тему &quot;Разработка подсистемы управления файлами со способом физической организации файла в...

Скопировать из разных папок в одну с под папками и разными расширениями
foreach (var file in Directory.GetFiles(InitPath(), &quot;*.&quot;)) { File.Copy(file, Path.Combine(PathHome, Path.GetFileName(file))); } ...


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru