powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с директориями
19 сообщений из 19, страница 1 из 1
работа с директориями
    #38115928
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер,
Подскажите пожалуйста, как сделать так,чтобы выбиралась директория та, которую назначу сам, а не по дефолту?
Код:
Код: plaintext
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.
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <iostream>
using namespace std;
 
int main (void)
{
    setlocale (LC_ALL, "RUSSIAN");
    //Размер директории
    long int sizedir = 0;
    //Вспомогательные структуры и дескрипторы
    struct _finddata_t file;
    intptr_t hFile;
 
    //Открываем текущую директорию
    if ((hFile = _findfirst ( "*.*", &file )) == -1L)
    {
        cerr << "Не удалось открыть директорию" << endl;
    }
    else
    {
        //В цикле обходим файлы директории
        do
        {
            cout << file.name << " = " << file.size << " bytes " << endl;
            sizedir += file.size;
        }
        while ( _findnext (hFile, &file) == 0 );
        //Закрываем директорию
        _findclose (hFile);
        cout << "Общий размер директории = " << sizedir << " bytes " << endl;
    }
    //Остановка перед закрытием окна
    system ("PAUSE");
    return 0;
}


нужно переделать скорей всего кусок
Код: plaintext
1.
 if ((hFile = _findfirst ( "*.*", &file )) == -1L)


но не могу понять как?
...
Рейтинг: 0 / 0
работа с директориями
    #38115981
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если используешь _findfirst, то _chdir спасет.
...
Рейтинг: 0 / 0
работа с директориями
    #38117056
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl,

спасибо
...
Рейтинг: 0 / 0
работа с директориями
    #38117064
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пошел по другому пути
Код: plaintext
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.
void FolderSize(AnsiString Folder,int &Size,int &fCount,int &folCount)
  {
  // Функция записывает в параметры:
  // Size - размер папки в байтах
  //fCount - общее количество файлов в папке
  //folCount - общее количество подпапок в папке

  TSearchRec SR;
  // Проверяем, заканчивается ли путь к папке на \,
  // если да, то удаляем его
  if(Folder[Folder.Length()] == '\\')
	 Folder.SetLength(Folder.Length()-1);
  // Делаем первый поиск
  if(FindFirst(Folder+"\\*.*",faAnyFile,SR) == 0)
   do
	  {   //Если то что мы нашли не является обратными ссылками...
		 if(SR.Name != "." &&  SR.Name != "..")
		 {
			// Если то что мы нашли является папкой,
			// функция вызывает саму себя
			// и увеличивает счетчик кол-ва подпапок
			if((SR.Attr & faDirectory)!=0)
               {
				  FolderSize(Folder+"\\"+SR.Name,Size,fCount,folCount);
				  folCount++;
			   }
			else
               {
                  // Если это файл - прибавляем его размер к общему размеру
				  Size = Size + SR.Size;
				  fCount++;
               }
		 }
	  }
   while(FindNext(SR)==0);
	FindClose(SR);
  }



использую так:
Код: plaintext
1.
2.
3.
4.
5.
int a =0 , b = 0, c = 0; // Не забываем обнулить переменные.
  FolderSize("E:\\delphi",a,b,c); // Вообще здесь результат выбора папки DirectoryListBox
  ShowMessage (a); // Размер папки в байтах.
  ShowMessage (b); // Общее количество файлов в папке.
  ShowMessage (c); // Общее количество подпапок.



Проблемы:
1) не работает с размером папки больше >4Гб
2) Реализую с помошью C++ Builder, создан пользовательский интерфейс,в котором папки выбираю с помощью TDirectoryListBox, т.е. при выборе папки возвращает мне E:\delphi, а мне нужно чтобы было E:\\delphi, предварительно помещаю значение в Edit,после этого отрабатывает функции.
Как здесь поступить? парсить Edit, и после \ вставлять ещё один \.
Может быть можно оптимизировать саму функцию,чтобы она работала с одинарными \ ???
только не знаю как?
...
Рейтинг: 0 / 0
работа с директориями
    #38117071
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stellа мне нужно чтобы было E:\\delphi
1) Используй 64-х разрядный аккумулятор
2) Зачем? Это синтаксис исключительно для литералов. Функция работает с одним бэкслэшем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
работа с директориями
    #38117133
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,
Что-то я "погяричился", второй вопрос отпал....
но с 1)
так и не разобрался,можно по конкретней?или пример?
...
Рейтинг: 0 / 0
работа с директориями
    #38117136
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Может на первый взгляд глупые вопросы задаю, но если не затруднит, подскажите,что вы имели ввиду под
"Используй 64-х разрядный аккумулятор"
...
Рейтинг: 0 / 0
работа с директориями
    #38117150
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

смотрю структуру TSearchRec, размер _int64
struct TSearchRec
{

public:
int Time;
__int64 Size;
int Attr;
TFileName Name;
int ExcludeAttr;
unsigned FindHandle;
_WIN32_FIND_DATAW FindData;
};


разве в данном случае не должно отрабатывать всё корректно?
А у меня в результате, если большая папка то результат отрицательный
...
Рейтинг: 0 / 0
работа с директориями
    #38117154
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stellА у меня в результате, если большая папка то результат отрицательный

Потом что у тебя переменная Size объявлена как int.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
работа с директориями
    #38117181
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

точно,спасибо.
double справился с задачей
...
Рейтинг: 0 / 0
работа с директориями
    #38117197
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stelldouble справился с задачей
С дуба рухнул?.. Открой справку по целым типам, там ждёт тебя сюрприз.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
работа с директориями
    #38117206
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Всё,спасибо.
Разобрался
...
Рейтинг: 0 / 0
работа с директориями
    #38117207
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stellDimitry Sibiryakov,

точно,спасибо.
double справился с задачей
А в каком контексте ты применил double и как?
...
Рейтинг: 0 / 0
работа с директориями
    #38117463
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

void FolderSize(AnsiString Folder,double &Size,int &fCount,int &folCount)


и
применил

int b = 0, c = 0; // Не забываем обнулить переменные.
double a=0;
//-------
...
Рейтинг: 0 / 0
работа с директориями
    #38117479
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Везде где есть расчёт размера файлов и директорий используй __int64.
Double тебе не поможет. Он - источник других проблем.
...
Рейтинг: 0 / 0
работа с директориями
    #38117712
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
спасибо,буду иметь ввиду.
А можно ещё один вопрос?
нужно
определить средний размер для каждой группы файлов (группировать по расширению и отдельной строкой - для всех) - рекурсивно по всей папке.

С какого конца как говориться взяться?если можно алгоритм или примерчик
...
Рейтинг: 0 / 0
работа с директориями
    #38117867
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
denis_stellС какого конца как говориться взяться?если можно алгоритм или примерчик
Никакого алгоритма и примерчика. Это настолько тривиально что даже
термин алгоритм здесь неуместен. Почитай про hash_map.
...
Рейтинг: 0 / 0
работа с директориями
    #38118066
denis_stell
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,
примерно правильно понимаю?
std::hash_map, где ключами будут строки с расширением файла, а значениями - размер?
...
Рейтинг: 0 / 0
работа с директориями
    #38118109
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / работа с директориями
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]