- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
int getFilesize(char* fname) {
int f=open(fname, O_RDONLY);
int size=0;
if (f<0) {/*не важно*/}
size=lseek(f, 0, SEEK_END);
close(f);
return size;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+17
int getFilesize(char* fname) {
int f=open(fname, O_RDONLY);
int size=0;
if (f<0) {/*не важно*/}
size=lseek(f, 0, SEEK_END);
close(f);
return size;
}
Писал прогу под линукс впервые. К концу написания уже знал что такое stat(), но как глянул в начало...)))))
на MS-DOS, у int 21h не было функции возвращающей размер файла. вот такая фигня была длительное время официальным способом определения размера файла. да и опять же, на виндах, GetFileSize() хочет хэндл файла, что значит что файл нужно открыть что бы узнать размер.
да что я говорю, говно, говно.
PS упс. начиная с XP есть GetFileAttributesEx().
1. Для определения стелс-вирусов, когда размер в атрибутах и размер потока не совпадают.
2. Для не совсем файлов, т. е. для непонятной хрени, которая открывается как файл, но на диске не лежит, а потому атрибутов может не иметь. Правда, не любые потоки сикабельны...
я сомневаюсь что это когда либо работало с NT или *NIX. только на ранних линухах можно было писать на прямую на диск с которого уже была смонтирована файловая система. (про масдай и вынь9х молчу.)
"2. Для не совсем файлов, т. е. для непонятной хрени, которая открывается как файл, но на диске не лежит, а потому атрибутов может не иметь. Правда, не любые потоки сикабельны..."
детский сад. последнее что ты хочешь, это какой железке (например тому же стримеру) сказать, "плиз прокрути до конца." тут уже проще - и безопастнее - попросить пользователя ввести размер вручную. какая "непонятная херня" скорее всего только с ioctl() (или на виндах DeviceIoControl()) и будет работать. почему и может называется непонятной херней, потому что не поддерживает стандартных интерфейсов типа char или block device (которые предусматривают возможность вернуть размер). (это я как бывшый разработчик драйверов пишу.)
за int говно
за неконстантный char * говно
за способ определения длины файла - иногда имеет право на жизнь