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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: размер файла  (Прочитано 14501 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
Junk
Гость
« : 02-10-2006 07:44 » 

Как можно узнать количество символов, содержащихся в файле?
Записан
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #1 : 02-10-2006 07:51 » 

просто узнай его размер? или конкретных символов?
самый простой способ сделать seek до конца файла и посмотреть позицию
по сложней спросить у ОС.
Записан

Странно всё это....
Junk
Гость
« Ответ #2 : 02-10-2006 08:02 » 

А нет какой-нибудь функции типа filelenght, или типа ее?
Вроде применял какую-то, тока уже не помню где и как.
Записан
Serg79
Команда клуба

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

WWW
« Ответ #3 : 02-10-2006 08:55 » 

Вообщето есть такая функция:
Код:
DWORD GetFileSize(
  HANDLE hFile,           // handle to file
  LPDWORD lpFileSizeHigh  // high-order word of file size
);
Она тебе даст размер файла. А уж сколько там сивмолов я думаю посчитать сможешь. Улыбаюсь
Записан
npak
Команда клуба

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

« Ответ #4 : 02-10-2006 09:25 » 

Вопрос зависит от того, как символы хранятся в файле.  Если простой текстовый файл, то зависит от кодировки.  В однобайтных кодировках (latin-1,koi8, windows-1251, ...) число символов совпадает с размером файла. В двухбайтной кодировке (Unicode 16 бит ака UTF-16) число символов равно (размер_файла/2 - 1) или размер_файла/2
Единицу нужно вычесть из-за того, что в двух вариантах UTF-16 в начале Юникодного текстового файла идёт 2-х байтный префикс BOM (Byte Order Mark), означающий Юникодность.

Но если текст в файле представлен в многобайтной кодировке (например, UTF-8), когда разные символы кодируются различным числом байт, то между размером файла и числом символов нет прямой связи.  Необходимо читать файл, разбирать его и подсчитывать символы.
« Последнее редактирование: 02-10-2006 09:28 от npak » Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Serg79
Команда клуба

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

WWW
« Ответ #5 : 02-10-2006 09:28 » 

И я о том же npak. Улыбаюсь
Записан
Junk
Гость
« Ответ #6 : 02-10-2006 13:11 » new

if((fl = fopen(File_Location,"r"))==NULL)
        return FALSE;

DWORD hsize;
DWORD size = GetFileSize(fl, &hsize);

GetFileSize() че-то возвращает -1
Почему так?
Записан
Finch
Спокойный
Администратор

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


« Ответ #7 : 02-10-2006 13:22 » 

Потому что ты используеш функции из двух разных библиотек. Если хочеш использовать WinAPI, то функция открытия хэндла файла CreateFile
Записан

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

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

« Ответ #8 : 02-10-2006 13:49 » 

В стандартной библиотеке Си есть функция stat, которая принимает на вход имя файла. Нет необходимости открывать файл.
Кроме того, есть функция filelength, она принимает на вход дескриптор потока, открытого функцией open.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Serg79
Команда клуба

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

WWW
« Ответ #9 : 03-10-2006 04:19 » 

В стандартной библиотеке Си есть функция stat, которая принимает на вход имя файла. Нет необходимости открывать файл.
Кроме того, есть функция filelength, она принимает на вход дескриптор потока, открытого функцией open.
npak ты не ошибаешся, помоему в стандартной библиотеке С/С++ нет этих функций. Я зная, что они есть в Visual C++ 6.0 но не факт что они есть в других компиляторах. Хотя точно не знаю.
Записан
npak
Команда клуба

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

« Ответ #10 : 03-10-2006 07:18 » 

Да, справедливое замечание.  Функции stat и fstat определены в Posix.  в большинстве операционных систем они присутствуют.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
Junk
Гость
« Ответ #11 : 03-10-2006 08:58 » 

Благодарю, stat - хорошее решение
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines