Форум программистов, компьютерный форум, киберфорум
Assembler: DOS/Real Mode/16-bits
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 28.11.2016
Сообщений: 3
1

Вывести размер каждого файла в каталоге

01.12.2016, 16:01. Просмотров 1378. Ответов 3
Метки нет (Все метки)

Вывести размер каждого файла в каталоге.
Каким образом это сделать?

Нужно на TASM`е.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2016, 16:01
Ответы с готовыми решениями:

Как в начало каждой строки каждого текстового файла в текущем каталоге вставить имя этого же файла?
Здравствуйте, подскажите пожалуйста как в текущем каталоге, в начало каждой строки каждого...

NTFS, вывести суммарный размер файлов в заданном каталоге
Помогите реализовать пример Вывести суммарный размер файлов в заданном каталоге

Поучить размер каждого файла
Здесь мне важнее не столько получить тот размер, сколько просто запустить просмотр всех файлов с...

Вывести имя самого большого файла в каталоге
нужно переделать программу так, чтобы вместо самого старого файла в папке My documents выводилось...

3
4$M f0r3v3r XD
5818 / 1754 / 192
Регистрация: 14.12.2014
Сообщений: 3,294
Записей в блоге: 11
01.12.2016, 20:19 2
Код
--------D-214E-------------------------------
INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
	AH = 4Eh
	AL = special flag for use by APPEND (refer to note below)
	CX = file attribute mask (see #01420 at AX=4301h) (bits 0 and 5 ignored)
	    0088h (Novell DOS 7) find first deleted file
	DS:DX -> ASCIZ file specification (may include path and wildcards)
Return: CF clear if successful
	    Disk Transfer Area filled with FindFirst data block (see #01626)
	CF set on error
	    AX = error code (02h,03h,12h) (see #01680 at AH=59h/BX=0000h)
Notes:	for search attributes other than 08h, all files with at MOST the
	  specified combination of hidden, system, and directory attributes
	  will be returned.  Under DOS 2.x, searching for attribute 08h
	  (volume label) will also return normal files, while under DOS 3.0+
	  only the volume label (if any) will be returned.
	this call also returns successfully if given the name of a character
	  device without wildcards.  DOS 2.x returns attribute 00h, size 0,
	  and the current date and time.  DOS 3.0+ returns attribute 40h and
	  the current date and time.
	immediately after an INT 2F/AX=B711h (APPEND return found name), the
	  name at DS:DX will be overwritten; if AL=00h on entry, the actual
	  found pathname will be stored, otherwise, the actual found path
	  will be prepended to the original filespec without a path.
	under LANtastic, this call may be used to obtain a list of a server's
	  shared resources by searching for "\\SERVER\*.*"; a list of printer
	  resources may be obtained by searching for "\\SERVER\@*.*"
	under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
BUGS:	under DOS 3.x and 4.x, the second and subsequent calls to this function
	  with a character device name (no wildcards) and search attributes
	  which include the volume-label bit (08h) will fail unless there is
	  an intervening DOS call which implicitly or explicity performs a
	  directory search without the volume-label bit.  Such implicit
	  searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
	  (AH=41h), and RENAME (AH=56h)
	DR DOS 3.41 and 5.0 return the Directory attribute for the volume label
SeeAlso: AH=11h,AH=4Fh,AX=4301h,AX=714Eh,AX=71A1h,AX=F257h/SF=02h
SeeAlso: INT 2F/AX=111Bh,INT 2F/AX=B711h

Format of FindFirst data block:
Offset	Size	Description	(Table 01626)
 00h	BYTE	search attributes
 01h	BYTE	drive letter
 02h 11 BYTEs	search template
 0Dh	WORD	entry count within directory
 0Fh	WORD	cluster number of start of parent directory
 11h  4 BYTEs	reserved
 15h	BYTE	attribute of file found
 16h	WORD	file time (see #01665 at AX=5700h)
 18h	WORD	file date (see #01666 at AX=5700h)
 1Ah	DWORD	file size
 1Eh 13 BYTEs	ASCIZ filename+extension
--------D-214F-------------------------------
INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
	AH = 4Fh
	Disk Transfer Area contains data block from previous FindFirst or
	  FindNext call
Return: CF clear if successful
	    Disk Transfer Area updated
	CF set on error
	    AX = error code (12h) (see #01680 at AH=59h/BX=0000h)
Notes:	under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
	  the next matching deleted file will be returned
	since the entire state of a FindFirst/FindNext sequence is contained
	  in the data block in the DTA, other disk operations such as renaming,
	  moving, deleting, or creating files can cause inaccurate directory
	  searches, such as finding the same file twice
BUG:	DR DOS 3.41 and 5.0 return the Directory attribute for the volume label
SeeAlso: AH=12h,AH=4Eh,AX=714Fh,AX=71A1h
Получаешь список файлов, там же и размер указан.
Вывод числа на экран: Ввод и вывод чисел в различных системах счисления
2
Модератор
Эксперт по электронике
7342 / 3569 / 1413
Регистрация: 01.02.2015
Сообщений: 11,175
Записей в блоге: 1
01.12.2016, 22:13 3
Перебор всех файлов в каталоге.https://www.cyberforum.ru/post4770617.html
Или здесь Заменить расширения всех файлов в текущей директории на расширение “.cul”

Для уточнения размера файла придётся его открыть. Потом перенести указатель в файле в конец. Взять позицию указателя - это и будет размер файла. Закрыть файл.

Добавлено через 2 минуты
Упс. Я уже забыл, о том, что присутствует в DTA. Действительно, если есть в DTA - зачем лишние манипуляции.
3
Эксперт Hardware
5146 / 1809 / 338
Регистрация: 29.07.2014
Сообщений: 2,775
Записей в блоге: 5
06.12.2016, 18:18 4
Лучший ответ Сообщение было отмечено ФедосеевПавел как решение

Решение

Цитата Сообщение от ФедосеевПавел Посмотреть сообщение
Действительно, если есть в DTA - зачем лишние манипуляции.
..да и с DTA тут волокиты хватает.
Например ниже, чтоб выстроить все данные в табличку, пришлось копировать имя/размер каждого файла в отдельное поле, и уже от туда выводить досовской строкой:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
; fasm-code
; выводит имя/размер файла, из текущей папки
;---------------------------------------------
org 100h
jmp start
 
mes0     db   13,10,'File name       Size'
         db   13,10,'--------------------------$'
fName    db   13,10            ;
         db   16 dup(' ')      ; поле под имя,
fSize    db   08 dup('$')      ;    ..и под размер
fMask    db   '*.*',0          ; маска для поиска файлов
newDTA   db   45 dup(0)        ; поле под DTA
 
start:  mov   ah,9             ; выводим шапку
        mov   dx,mes0
        int   21h
 
        mov   ah,1Ah           ; создать DTA
        mov   dx,newDTA
        int   21h
 
        mov   ah,4Eh           ; искать,
        mov   cx,20h           ;   ..только файлы
        mov   dx,fMask
        int   21h
 
@find:  call  printName        ; выводим данные на экран!
        mov   ah,4Fh           ; искать сл.файл
        mov   dx,newDTA
        int   21h
        jnc   @find            ; до флага(CF)
 
@exit:  xor   ax,ax            ; выход в DOS!
        int   16h
        int   20h
 
;нннннннннннн ПРОЦЕДУРЫ нннннннннннннннннннннннннннннннннннннннннн
printName:         ; процедура вывода данных на экран!!!
        pusha                  ;
        mov   si,newDTA+30     ; источник с именем
        mov   di,fName+2       ; приёмник
        push  di               ;
@01:    lodsb                  ;
        or    al,al            ;
        jz    @02              ;
        stosb                  ; скопировать имя в поле!
        jmp   @01              ;
 
@02:    mov   si,newDTA+26     ; источник с размером файла
        mov   di,fSize         ;
        push  di               ;
        lodsd                  ; берём размер в ЕАХ (4 байта)
        call  hex2asc          ; скопировать размер в поле!
 
        mov   ah,9             ; вывести поле с данными на экран!
        mov   dx,fName         ;
        int   21h              ;
 
        mov   al,'$'           ; очистить поле размера
        mov   cx,8             ;
        pop   di               ;
        rep   stosb            ;
        mov   al,' '           ; очистить поле имени
        mov   cx,16            ;
        pop   di               ;
        rep   stosb            ;
        xor   al,al            ; очистить поле с именем в DTA
        mov   cx,15            ;
        mov   di,newDTA+30     ;
        rep   stosb            ;
        popa                   ;
ret                            ;
;--------------------------------------------------------------
hex2asc:           ; fn.перевода числа из EAX в символы!!!
        mov   ebx,10           ; система счисления
        xor   ecx,ecx          ;
isDiv:  xor   edx,edx          ;
        div   ebx              ;
        push  edx              ;
        inc   cx               ;
        or    eax,eax          ;
        jnz   isDiv            ;
isOut:  pop   eax              ;
        add   al,30h           ; перевести в символы
        stosb                  ; запомнить в поле вывода(ES:DI)!
        loop  isOut            ;
        xor   ecx,ecx          ;
ret                            ;
1
Изображения
 
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2016, 18:18

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вывести размер вклада для каждого месяца
1.Размер первоначального банковского вклада генерируется случайным образом (2000-10000). Размер...

Вывести на экран имя файла с наименьшим размером в каталоге
Привет всем, теперь мне нужно вывести на экран название файла с наибольшим размером, по моему ...

Вывести размер заработной платы каждого сотрудника фирмы с учетом налога
6) Информация о сотрудниках фирмы включает: Ф.И.О., табельный номер, количество проработанных часов...

Вывести размер заработной платы каждого работника фирмы по разнице налога
Помогите пожалуста, немогу зделать никак лабу..... Помогите пожалуйста Постановка задачи* 1....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.