- 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(), но как глянул в начало...)))))
Dummy00001 18.05.2013 18:18 # +4
на MS-DOS, у int 21h не было функции возвращающей размер файла. вот такая фигня была длительное время официальным способом определения размера файла. да и опять же, на виндах, GetFileSize() хочет хэндл файла, что значит что файл нужно открыть что бы узнать размер.
да что я говорю, говно, говно.
PS упс. начиная с XP есть GetFileAttributesEx().
inkanus-gray 19.05.2013 02:41 # 0
1. Для определения стелс-вирусов, когда размер в атрибутах и размер потока не совпадают.
2. Для не совсем файлов, т. е. для непонятной хрени, которая открывается как файл, но на диске не лежит, а потому атрибутов может не иметь. Правда, не любые потоки сикабельны...
Dummy00001 19.05.2013 03:03 # +1
я сомневаюсь что это когда либо работало с NT или *NIX. только на ранних линухах можно было писать на прямую на диск с которого уже была смонтирована файловая система. (про масдай и вынь9х молчу.)
"2. Для не совсем файлов, т. е. для непонятной хрени, которая открывается как файл, но на диске не лежит, а потому атрибутов может не иметь. Правда, не любые потоки сикабельны..."
детский сад. последнее что ты хочешь, это какой железке (например тому же стримеру) сказать, "плиз прокрути до конца." тут уже проще - и безопастнее - попросить пользователя ввести размер вручную. какая "непонятная херня" скорее всего только с ioctl() (или на виндах DeviceIoControl()) и будет работать. почему и может называется непонятной херней, потому что не поддерживает стандартных интерфейсов типа char или block device (которые предусматривают возможность вернуть размер). (это я как бывшый разработчик драйверов пишу.)
LispGovno 18.05.2013 18:25 # −1
LispGovno 18.05.2013 18:27 # −2
eax 18.05.2013 18:55 # 0
myaut 18.05.2013 18:28 # +6
bormand 19.05.2013 11:38 # +1
defecate-plusplus 19.05.2013 11:14 # +3
за int говно
за неконстантный char * говно
за способ определения длины файла - иногда имеет право на жизнь
bormand 19.05.2013 11:37 # +1
eax 23.05.2013 15:04 # +1