Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Размер файла в Си

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

mmiichae



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Записываю в файл строки как мне определить его размер в байтах  
(ИСПОЛЬЗОВАТЬ ТОЛЬКО СРЕДСВА СТАНДАРЕТНОГО С)

Всего записей: 698 | Зарегистр. 17-10-2003 | Отправлено: 22:40 13-12-2003
Arion



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Первое что пришло в голову
 

Код:
 
FILE*  fMyFile = fopen("data.dat","r");
fseek(fMyFile,0,SEEK_END);
long size = ftell(fMyFile);
 

Всего записей: 436 | Зарегистр. 29-06-2003 | Отправлено: 23:00 13-12-2003
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mmiichae
Вариант:

Код:
struct stat st;
 
stat("/path/to/file.txt", &st);
printf("Size: %d bytes\n", st.st_size);

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 08:39 16-12-2003 | Исправлено: f_serg, 08:40 16-12-2003
redp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
для Visual C++ еще канает такой способ:

Код:
 
#include <io.h>
 
DWORD get_size_from_FILE(FILE *fp)
{
  DWORD hi;
  DWORD res;
  res = GetFileSize((HANDLE)_get_osfhandle(fileno(fp)), &hi); // в hi - старший DWORD размера для файлов > 2 Gb
  return res;
}
 

Всего записей: 514 | Зарегистр. 16-06-2003 | Отправлено: 14:36 16-12-2003
mmiichae



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я просил именно на Си а не Си++ да еше и Visual

Всего записей: 698 | Зарегистр. 17-10-2003 | Отправлено: 23:41 16-12-2003
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mmiichae

Цитата:
я просил именно на Си а не Си++ да еше и Visual

Так тебе хоть какой-нибудь вариант подошел?

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 14:38 17-12-2003
mmiichae



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да вот этот:

Цитата:
FILE*  fMyFile = fopen("data.dat","r");  
fseek(fMyFile,0,SEEK_END);  
long size = ftell(fMyFile);  

 
Всем спасибо.

Всего записей: 698 | Зарегистр. 17-10-2003 | Отправлено: 00:08 18-12-2003
mcs



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне тоже раньше как-то подобное нужно было,
причем не открывая хэндл файла. Я делал FindFile'ом

Всего записей: 453 | Зарегистр. 30-01-2003 | Отправлено: 22:32 21-12-2003
mcs



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
т.е. FindFirst

Всего записей: 453 | Зарегистр. 30-01-2003 | Отправлено: 09:16 22-12-2003
MadMan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mcs

Цитата:
Я делал FindFile'ом

Можно по подробнее
 
ALL
мне надо из текущего каталога выбрать файл с наименьшим размером
 
спасибо.

Всего записей: 476 | Зарегистр. 06-10-2001 | Отправлено: 07:49 16-02-2004 | Исправлено: MadMan, 07:57 16-02-2004
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MadMan

Цитата:
мне надо из текущего каталога выбрать файл с наименьшим размером

Под винды? FindFirstFile(), FindNextFile(), FindClose().
В структуре WIN32_FIND_DATA возвращается размер файла.
Для UNIX-а связка opendir(), readdir(), closedir() + stat().

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 08:21 16-02-2004
MadMan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
f_serg
Желательно использовать FindFirst и FindNext (ДОС)

Всего записей: 476 | Зарегистр. 06-10-2001 | Отправлено: 08:03 17-02-2004
mihas83



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MadMan

Цитата:
Желательно использовать FindFirst и FindNext  

Почему желательно? Универсальное
Цитата:
FILE*  fMyFile = fopen("data.dat","r");  
fseek(fMyFile,0,SEEK_END);  
long size = ftell(fMyFile);  
- тоже "быстрое"...

----------
Мы знаем: время растяжимо. Оно зависит от того,
Какого рода содержимым Вы заполняете его. (C. Маршак)

Всего записей: 7832 | Зарегистр. 15-07-2003 | Отправлено: 09:06 17-02-2004
f_serg



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MadMan

Цитата:
(ДОС)

Компилятора нету. Подожди, еще кто0нибудь поможет.

----------
Serg

Всего записей: 1706 | Зарегистр. 11-09-2002 | Отправлено: 11:36 17-02-2004
nick7inc



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Можно узнать длину файла, открытого через fopen():

Код:
 inline unsigned long int lof (FILE *file)  {return (filelength (fileno (file)));}
 

Всего записей: 1138 | Зарегистр. 04-05-2007 | Отправлено: 17:01 05-06-2009
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Размер файла в Си


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru