🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.asm
9 messages
9 total messages Started by Remek Sun, 25 Sep 2011 23:41
Lista plików w katalogu
#2510
Author: Remek
Date: Sun, 25 Sep 2011 23:41
38 lines
2255 bytes
Witam

Walczę z przerwami nad programem listującym pliki w katalogu. Jedna z wersji
wykorzystuje DOS-owe polecemie dir. Wykonanie polecenia daje:

-----------------------------------------------------------------
 Wolumin w stacji E nie ma etykiety.
 Numer seryjny woluminu: 2B60-0E0C

 Katalog:
E:\ArchRW4\Asembler\Asembler32\Masm32\CwiczMasm\Format\Listing\XP\2

2010-10-28  21:37    <DIR>          .
2010-10-28  21:37    <DIR>          ..
2011-09-26  01:29                16 lista.bat
2009-12-20  05:58            10˙958 Listing.asm
2008-09-23  12:46               520 Listing.bat
2009-12-20  05:58             5˙632 Listing.exe
2007-12-01  16:38                45 Listing.rc
2009-12-20  05:58               860 Listing.res
--------------------------------------------------------------------

Aby otrzymać postać:

Listing.asm       10   kB
Listing.bat        0,5 kB
Listing.exe        5   kB

muszę plik dodatkowo obrabiać w napisanym programie. Efekty są różne w
zależności od ilości podkatalogów (które usuwam) i od tego czy polecenie
jest realizowane w Win 98, czy WIn XP (różna ilość spacji).

Druga wersja bazuje na tutorialu Iczeliona strona 31/"Testowanie kontrolki
widoku listy". W tej wersji jednak uzyskuję tylko nazwę pliku bez jego
rozmiaru. Jeśli ktoś wie jak to zrobić proszę o podpowiedź. Ewentualnie mogę
podesłać wspomniana stronę tutoriala.

Remek
Re: Lista plików w katalogu
#2511
Author: Bogdan (bogdro)
Date: Mon, 26 Sep 2011 16:19
52 lines
3177 bytes
W dniu 26.09.2011 01:41, Remek pisze:
> Witam
> 
> Walczę z przerwami nad programem listującym pliki w katalogu. Jedna z wersji
> wykorzystuje DOS-owe polecemie dir. Wykonanie polecenia daje:
> 
> -----------------------------------------------------------------
>  Wolumin w stacji E nie ma etykiety.
>  Numer seryjny woluminu: 2B60-0E0C
> 
>  Katalog:
> E:\ArchRW4\Asembler\Asembler32\Masm32\CwiczMasm\Format\Listing\XP\2
> 
> 2010-10-28  21:37    <DIR>          .
> 2010-10-28  21:37    <DIR>          ..
> 2011-09-26  01:29                16 lista.bat
> 2009-12-20  05:58            10˙958 Listing.asm
> 2008-09-23  12:46               520 Listing.bat
> 2009-12-20  05:58             5˙632 Listing.exe
> 2007-12-01  16:38                45 Listing.rc
> 2009-12-20  05:58               860 Listing.res
> --------------------------------------------------------------------
> 
> Aby otrzymać postać:
> 
> Listing.asm       10   kB
> Listing.bat        0,5 kB
> Listing.exe        5   kB
> 
> muszę plik dodatkowo obrabiać w napisanym programie. Efekty są różne w
> zależności od ilości podkatalogów (które usuwam) i od tego czy polecenie
> jest realizowane w Win 98, czy WIn XP (różna ilość spacji).

 Oprócz tego, uruchamianie dodatkowego programu i przeglądanie jego
wyników raczej nie będzie zbyt wydajne.

> Druga wersja bazuje na tutorialu Iczeliona strona 31/"Testowanie kontrolki
> widoku listy". W tej wersji jednak uzyskuję tylko nazwę pliku bez jego
> rozmiaru. Jeśli ktoś wie jak to zrobić proszę o podpowiedź. Ewentualnie mogę
> podesłać wspomniana stronę tutoriala.

 Zobacz, jak działa ta lista. Czytaj ręcznie listę plików w katalogu -
raz, że to będzie szybsze, to jeszcze zwykle od razu masz więcej
informacji niż tylko nazwa pliku. W C są od tego funkcje opendir,
readdir i closedir, nie wiem jak w win32 API (ale mogę spróbować znaleźć).
 Co do strony tutoriala, to lepiej podaj link.

-- 
Pozdrawiam/Regards - Bogdan                     (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.Xiph.org   www.TorProject.org   Soft (EN): miniurl.pl/bogdro-soft
Re: Lista plików w katalogu
#2512
Author: Remek
Date: Mon, 26 Sep 2011 16:43
9 lines
1276 bytes
Użytkownik "Bogdan (bogdro)" napisał:

> Co do strony tutoriala, to lepiej podaj link.

W tym sęk, że nie mogę jej znaleźć. Googel nie znajduje oryginału i też nie
znajduje polskiego tłumaczenia inżyniera Wałaszka. Wygląda na to, że strony
zostały usunięte, albo inaczej się nazywają. Popróbuję jeszcze.

Remek
Re: Lista plików w katalogu
#2516
Author: Michoo
Date: Mon, 26 Sep 2011 17:54
10 lines
1144 bytes
W dniu 26.09.2011 01:41, Remek pisze:
> W tej wersji jednak uzyskuję tylko nazwę pliku bez jego
> rozmiaru. Jeśli ktoś wie jak to zrobić proszę o podpowiedź. Ewentualnie mogę
> podesłać wspomniana stronę tutoriala.
FindFirstFile,FindNextFile,GetFileType,GetFileSize  i sprintf do 
formatowania

-- 
Pozdrawiam
Michoo
Re: Lista plików w katalogu
#2517
Author: Remek
Date: Tue, 04 Oct 2011 23:32
11 lines
1250 bytes
Użytkownik "Michoo" napisał:

> FindFirstFile,FindNextFile,GetFileType,GetFileSize  i sprintf do
> formatowania

Która z tych funkcji listuje pliki z podaniem rozmiaru? Z tego co czytałem
te funkcje Windows nie podają atrybutów. Nie sądzę, aby rozmiar był
atrybutem, ale te właśnie fubkcje są w moim programie i rozmiarów nie
podają.

Remek
Re: Lista plików w katalogu
#2518
Author: Michoo
Date: Wed, 05 Oct 2011 08:57
30 lines
1635 bytes
W dniu 05.10.2011 01:32, Remek pisze:
> Użytkownik "Michoo" napisał:
>
>> FindFirstFile,FindNextFile,GetFileType,GetFileSize  i sprintf do
>> formatowania
>
> Która z tych funkcji listuje pliki z podaniem rozmiaru?
Żadna nie listuje. Listować musisz sobie sam.


> Z tego co czytałem
> te funkcje Windows nie podają atrybutów. Nie sądzę, aby rozmiar był
> atrybutem, ale te właśnie fubkcje są w moim programie i rozmiarów nie
> podają.
GetFileSize podałem dla zmyłki.

Algorytm jest mniej więcej taki:
list(ścieżka):
  FindFirst(ścieżka)
  while next=FindNext()
   if(GetType(next)==dir)
     list(next)
   else
    size=GetSize
    sprintf(buf,"%s %d",next,size);
    MessageBox(buf)

-- 
Pozdrawiam
Michoo
Re: Lista plików w katalogu
#2513
Author: Remek
Date: Wed, 05 Oct 2011 18:52
12 lines
1271 bytes
Użytkownik "Bogdan (bogdro)" napisał:

> Co do strony tutoriala, to lepiej podaj link.

Dzięki uprzejmości autora tłumaczenia link się odnalazł:

http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/0032.php

Z tego co zauważyłem tutorial został rozbudowany. Kontrolka pokazuje rozmiar
pliku. Problem w tym jak to co się pokazuje w oknie zapisać do pliku txt.

Remek
Re: Lista plików w katalogu
#2514
Author: Bogdan (bogdro)
Date: Thu, 06 Oct 2011 15:46
27 lines
2222 bytes
W dniu 05.10.2011 20:52, Remek pisze:
> Użytkownik "Bogdan (bogdro)" napisał:
> 
>> Co do strony tutoriala, to lepiej podaj link.
> 
> Dzięki uprzejmości autora tłumaczenia link się odnalazł:
> 
> http://edu.i-lo.tarnow.pl/inf/prg/002_winasm/0032.php
> 
> Z tego co zauważyłem tutorial został rozbudowany. Kontrolka pokazuje rozmiar
> pliku. Problem w tym jak to co się pokazuje w oknie zapisać do pliku txt.

 Do obsługi plików masz CreateFile i WriteFile lub FileWrite (nie
pamiętam dokładnie).
 Listę plików masz, według kodu na stronie (i podpowiedzi kolegów),
dzięki FindFirstFile+FindNextFile. Te funkcje zwracają struktury typu
WIN32_FIND_DATA. Ze struktur tych procedura ShowFileInfo w kodzie na
stronie wyciąga [edi].cFileName i [edi].nFileSizeLow.
 Wystarczy więc te pola zapisywać do pliku. Przerabianie DWORDa na
napis na pewno już masz (a jeśli nie, to możesz użyć wsprintf, jak na
tej stronie), więc wystarczy przerobić i bufor wyjściowy zapisać do pliku.

-- 
Pozdrawiam/Regards - Bogdan                     (GNU/Linux & FreeDOS)
Kurs asemblera x86 (DOS, GNU/Linux):http://rudy.mif.pg.gda.pl/~bogdro
Grupy dyskusyjne o asm:  pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32
www.Xiph.org   www.TorProject.org   Soft (EN): miniurl.pl/bogdro-soft
Re: Lista plików w katalogu
#2515
Author: Remek
Date: Thu, 06 Oct 2011 22:48
45 lines
2078 bytes
Użytkownik "Bogdan (bogdro)" napisał:

> procedura ShowFileInfo w kodzie na stronie wyciąga [edi].cFileName i
[edi].nFileSizeLow.

Masz na myśli to?

======================================
ShowFileInfo PROC USES edi row:DWORD, lpFind:DWORD

LOCAL lvi:        LV_ITEM
LOCAL buffer[20]: BYTE

    mov edi, lpFind

ASSUME edi: PTR WIN32_FIND_DATA

     mov lvi.imask, LVIF_TEXT + LVIF_PARAM
     push row
     pop lvi.iItem
     mov lvi.iSubItem, 0
     lea eax, [edi].cFileName
     mov lvi.pszText, eax
     push row
     pop lvi.lParam
    invoke SendMessage, hList, LVM_INSERTITEM, 0, addr lvi
     mov lvi.imask, LVIF_TEXT
     inc lvi.iSubItem
    invoke wsprintf, addr buffer, addr template, [edi].nFileSizeLow
     lea eax, buffer
     mov lvi.pszText, eax
    invoke SendMessage, hList, LVM_SETITEM, 0, addr lvi

ASSUME edi: NOTHING

    ret

ShowFileInfo endp

===========================================================

Dzięki za podpowiedź. Dzięki niej rozgryzłem tę strukture i program działa.
Jeszcze tylko optymalizacja i procedury formatowania tekstu.

Remek
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads