Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Узнать размер файла  (Прочитано 10518 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« : 26-12-2009 07:16 » 

Код:
__int64 getFileSize(const char * const file_path)
{
__int64 size = 0;

ifstream fin(file_path, std::ios::binary);
if(fin)
{
char read;
while(!fin.eof())
{
fin >> read;
++size;
}
fin.close();
}

return size;
}
Почему этот код пропускает пробелы, символы переноса строки, символы табуляции?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 26-12-2009 07:47 » 

А зачем так изврашаться? Есть же функция WinAPI http://msdn.microsoft.com/en-us/library/aa364955(VS.85).aspx
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #2 : 26-12-2009 07:52 » 

А с помощью какой функции инициализирова HANDLE? FindFirstFile?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 26-12-2009 08:07 » 

Там есть пример. http://msdn.microsoft.com/en-us/library/aa366548(VS.85).aspx
У тебя тот пример будет сводится к
Код:
HANDLE hFile;  
 hFile = CreateFile(lpcTheFile,
                     GENERIC_READ,
                     0,
                     NULL,
                     CREATE_ALWAYS,
                     FILE_ATTRIBUTE_NORMAL,
                     NULL);

  if (hFile == INVALID_HANDLE_VALUE)
  {
    printf("hFile is NULL\n");
    printf("Target file is %s\n",
  lpcTheFile);
    return 4;
  }
  int dwFileSize = GetFileSize(hFile,  NULL);
  printf("hFile size: %10d\n", dwFileSize);
  СloseHandle(hFile);
Естественно нужно будет подправить под свои нужды.
« Последнее редактирование: 26-12-2009 08:09 от Finch » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 26-12-2009 08:23 » 

А с помощью какой функции инициализирова HANDLE? FindFirstFile?
Inkognito, функция FindFirstFile используется для поиска файлов. Хоть она и возвращает в структуре WIN32_FIND_DATA размер найденного файла, для этого лучше использовать, как тебе описал Finch, функцию GetFileSize. Она выполняется быстрее и меньше ресурсов системы использует.
Записан
Dr.Yevhenius
Опытный

ua
Offline Offline
Пол: Мужской

« Ответ #5 : 26-12-2009 08:32 » 

Я до этого уже было пробовал с помощью WIN32_FILE_DATA узнавать размер файла, но ничего, кроме 0 (нуля), не получил. Не знаю почему.

Код
Код:
			__int64 file_size = 0;
{
HANDLE hFile;
char * file = stringConstPtrToPtr(sSource.c_str()); // sSource - string
LPTSTR lpcTheFile = TEXT(file);
hFile = CreateFile(lpcTheFile,
                  GENERIC_READ,
                  0,
                  NULL,
                  CREATE_ALWAYS,
                  FILE_ATTRIBUTE_NORMAL,
                  NULL);

delete [] file;
file = 0;

if (hFile != INVALID_HANDLE_VALUE)
file_size = GetFileSize(hFile, NULL);
CloseHandle(hFile);
}
почему-то всё время возвращает 0  Жаль
« Последнее редактирование: 26-12-2009 08:47 от Inkognito » Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 26-12-2009 09:07 » 

Inkognito, твой код не понятен:
Код:
				HANDLE hFile;
char * file = stringConstPtrToPtr(sSource.c_str()); // sSource - string
LPTSTR lpcTheFile = TEXT(file);
hFile = CreateFile(lpcTheFile,
                   GENERIC_READ,
                   0,
                   NULL,
                   CREATE_ALWAYS,
                   FILE_ATTRIBUTE_NORMAL,
                   NULL);

delete [] file;
file = 0;

if (hFile != INVALID_HANDLE_VALUE)
file_size = GetFileSize(hFile, NULL);
Строка "LPTSTR lpcTheFile = TEXT(file);" делает что то странное. Ты к указателю char *file добавляешь символ L (расширенные символы), у Тебя получается L ## file, короче ерунда полнейшая.

Далее Ты открываешь файл CreateFile с параметром CREATE_ALWAYS, что говорит "создать файл и если он существует обрезать его размер до нуля".

Правь свой код.
Записан
Serg79
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 26-12-2009 09:15 » new

Inkognito, еще добавлю:
Я до этого уже было пробовал с помощью WIN32_FILE_DATA узнавать размер файла, но ничего, кроме 0 (нуля), не получил. Не знаю почему.
если функция FindFirstFile находит файл, то в структуре WIN32_FILE_DATA всегда указан правильный размер найденного файла. Если это не происходит, то Ты что то делаешь не так.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines