Форум программистов, компьютерный форум CyberForum.ru

Как узнать размер файла? (студия 2013) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 5.00
Mypowerfulbrain
19 / 19 / 1
Регистрация: 24.07.2013
Сообщений: 121
16.02.2014, 23:00     Как узнать размер файла? (студия 2013) #1
Доброго времени суток, форумчане и гости! Есть небольшой код и хочется прикрутить определитель размера файлов в папке. Должно выводить имя файла и рядом его размер в байтах. Помогите, пожалуйста.

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
#include <iostream>
#include <stdio.h> 
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <string>
#include <sys/stat.h>
 
using namespace std;
 
int getFileSize(const char * fileName);
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    cout << "Введите путь к папке (Пример: C:\\MyFolder\\):" << endl;
    wstring folderpath;
    std::getline(wcin, folderpath);
    folderpath += L'*';
 
 
    WIN32_FIND_DATAW wfd;
 
    HANDLE const hFind = FindFirstFileW((L"\\\\?\\" + folderpath).c_str(), &wfd);
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            wcout << &wfd.cFileName[0] << endl;
 
        } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
 
    system("pause");
    return 0;
}
int getFileSize(const char * fileName)
{
    struct stat file_stat;
    stat(fileName, &file_stat);
    return file_stat.st_size;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
 Аватар для Убежденный
14188 / 6203 / 984
Регистрация: 02.05.2013
Сообщений: 10,331
Завершенные тесты: 1
16.02.2014, 23:20     Как узнать размер файла? (студия 2013) #2
GetFileSizeEx
http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx
Mypowerfulbrain
19 / 19 / 1
Регистрация: 24.07.2013
Сообщений: 121
17.02.2014, 13:32  [ТС]     Как узнать размер файла? (студия 2013) #3
Сделал немного иначе. Покатит?
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
#include <iostream>
#include <stdio.h> 
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <string>
#include <sys/stat.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    cout << "Введите путь к папке (Пример: C:\\MyFolder\\):" << endl;
    wstring folderpath;
    std::getline(wcin, folderpath);
    folderpath += L'*';
 
 
    WIN32_FIND_DATAW wfd;
 
    HANDLE const hFind = FindFirstFileW((L"\\\\?\\" + folderpath).c_str(), &wfd);
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            wcout << &wfd.cFileName[0] << endl;
            wcout << wfd.nFileSizeLow << endl;
 
        } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
 
    system("pause");
    return 0;
}
Убежденный
Системный программист
 Аватар для Убежденный
14188 / 6203 / 984
Регистрация: 02.05.2013
Сообщений: 10,331
Завершенные тесты: 1
17.02.2014, 13:33     Как узнать размер файла? (студия 2013) #4
Проверьте на файле размером больше 4 Гигабайт - узнаете.
Mypowerfulbrain
19 / 19 / 1
Регистрация: 24.07.2013
Сообщений: 121
17.02.2014, 13:57  [ТС]     Как узнать размер файла? (студия 2013) #5
Убежденный, а если использовать (__int64)wfd.nFileSizeLow; ?
Убежденный
Системный программист
 Аватар для Убежденный
14188 / 6203 / 984
Регистрация: 02.05.2013
Сообщений: 10,331
Завершенные тесты: 1
17.02.2014, 14:05     Как узнать размер файла? (студия 2013) #6
Цитата Сообщение от Mypowerfulbrain Посмотреть сообщение
Убежденный, а если использовать (__int64)wfd.nFileSizeLow; ?
Откуда такое нежелание использовать нормальные средства ?
Неужели вызвать GetFileSizeEx так трудно ?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
17.02.2014, 15:09     Как узнать размер файла? (студия 2013) #7
Цитата Сообщение от Убежденный Посмотреть сообщение
Неужели вызвать GetFileSizeEx так трудно ?
А разве не достаточно в данном случае просто использовать комбинацию nFileSizeLow и nFileSizeHigh?
The size of the file is equal to (nFileSizeHigh * (MAXDWORD+1)) + nFileSizeLow.
отсюда
Убежденный
Системный программист
 Аватар для Убежденный
14188 / 6203 / 984
Регистрация: 02.05.2013
Сообщений: 10,331
Завершенные тесты: 1
17.02.2014, 15:24     Как узнать размер файла? (студия 2013) #8
Цитата Сообщение от Tulosba Посмотреть сообщение
А разве не достаточно в данном случае просто использовать комбинацию nFileSizeLow и nFileSizeHigh?
ТС упорно не желает связываться с High DWORD.
Mypowerfulbrain
19 / 19 / 1
Регистрация: 24.07.2013
Сообщений: 121
17.02.2014, 15:38  [ТС]     Как узнать размер файла? (студия 2013) #9
Убежденный, можете помочь в этот код присобачить GetFileSize. Да, Я дурачек, и не разбираюсь что и как передавать в функцию.
Код:
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <stdio.h> 
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <string>
#include <sys/stat.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
 
    cout << "Введите путь к папке (Пример: C:\\MyFolder\\):" << endl;
    wstring folderpath;
    std::getline(wcin, folderpath);
    folderpath += L'*';
 
 
    WIN32_FIND_DATAW wfd;
 
    HANDLE const hFind = FindFirstFileW((L"\\\\?\\" + folderpath).c_str(), &wfd);
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            if (wfd.nFileSizeLow == 0)
            {
                FindNextFileW(hFind, &wfd);
            }
            else
            {
                wcout << &wfd.cFileName[0] << endl;
                wcout << wfd.nFileSizeLow << " байт" << endl;
            }
 
        } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
 
    system("pause");
    return 0;
}


А чем отличается nFileSizeLow от nFileSizeHigh ?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
17.02.2014, 15:51     Как узнать размер файла? (студия 2013) #10
Цитата Сообщение от Mypowerfulbrain Посмотреть сообщение
А чем отличается nFileSizeLow от nFileSizeHigh ?
Старшие и младшие разряды числа. С битовым представлением чисел в памяти знакомы?
Mypowerfulbrain
19 / 19 / 1
Регистрация: 24.07.2013
Сообщений: 121
17.02.2014, 19:52  [ТС]     Как узнать размер файла? (студия 2013) #11
Tulosba, если вы про преобразование чисел с одной системы счисления в другую, то это Я умею. nFileSizeLow вроде как в десятичном представлении выводиться. Числовой разряд – это ведь место на котором записана цифра?
Допустим, что у нас есть число 7895(семь тысяч восемьсот девяносто пять). В самый старший 3-ий разряд записана цифра 7, во 2-ой – 8, в 1-ый – 9, в нулевой – 5. Так?
Вроде как все десятичные разряды в числе количества байт учтены и совпадают со свойствами файла, если проверить средствами Windows.
Разъясните, пожалуйста, в чем же разница и какие еще старшие разряды есть в nFileSizeHigh? Объясните для простого человека, на пальцах, что такое в nFileSizeLow и nFileSizeHigh. А еще – чем лучше GetFileSizeEx. А то Я чухаю лоб

Код, чтобы далеко не ходить(хотя далеко могут послать меня):
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <stdio.h> 
#include <conio.h>
#include <math.h>
#include <windows.h>
#include <string>
#include <sys/stat.h>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    cout << "Введите путь к папке (Пример: C:\\MyFolder\\):" << endl;
    wstring folderpath;
    std::getline(wcin, folderpath);
    folderpath += L'*';
 
 
    WIN32_FIND_DATAW wfd;
 
    HANDLE const hFind = FindFirstFileW((L"\\\\?\\" + folderpath).c_str(), &wfd);
 
    if (INVALID_HANDLE_VALUE != hFind)
    {
        do
        {
            if (wfd.nFileSizeLow == 0)
            {
                FindNextFileW(hFind, &wfd);
            }
            else
            {
                wcout << &wfd.cFileName[0] << endl;
                wcout << wfd.nFileSizeLow << " байт" << endl << endl;
            }
 
        } while (NULL != FindNextFileW(hFind, &wfd));
 
        FindClose(hFind);
    }
 
    system("pause");
    return 0;
}
Убежденный
Системный программист
 Аватар для Убежденный
14188 / 6203 / 984
Регистрация: 02.05.2013
Сообщений: 10,331
Завершенные тесты: 1
17.02.2014, 20:18     Как узнать размер файла? (студия 2013) #12
wfd.nFileSizeLow - это переменная типа DWORD.
В нее влезает 2^32 значений. Максимальный размер файла,
который может быть выражен типом DWORD - 4 Гигабайта.
Вот почему одного DWORD-а для хранения размера файла мало и
используют второй DWORD. Т.е. один DWORD младший, второй старший.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2014, 21:00     Как узнать размер файла? (студия 2013)
Еще ссылки по теме:

C++ Как узнать размер массива
Как узнать размер открытого файла C++
Как узнать текущий размер файла, открытого для записи? C++

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

Или воспользуйтесь поиском по форуму:
Mypowerfulbrain
19 / 19 / 1
Регистрация: 24.07.2013
Сообщений: 121
17.02.2014, 21:00  [ТС]     Как узнать размер файла? (студия 2013) #13
Убежденный, то есть считать так?:
C++
1
wcout << 4294967296 * wfd.nFileSizeHigh + wfd.nFileSizeLow;

И это мы считаем реальный размер?
Yandex
Объявления
17.02.2014, 21:00     Как узнать размер файла? (студия 2013)
Ответ Создать тему
Опции темы

Текущее время: 15:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru