Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Jak rozróżnić katalog od pliku ??
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004
Jak rozróżnić katalog od pliku ??

Witam

Robię sobie program, który ma m.in wyświetlać w ListBox zawartość katalogu (katalog już jest okerślony)

Aby pobrać informacje o wszystkich plikach i katalogach w podanym katalogu korzystam z funkcji API:

Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" (ByVal pszPath As String, ByVal dwFileAttributes As Long, psfi As SHFILEINFO, ByVal cbFileInfo As Long, ByVal uFlags As Long) As Long

Wyświetlone pliki i katalogi powinny być tak posortowane aby najpierw były katalogi a następnie pliki

I pytanie jest:

Jak sprawdzić że pobrana pozycja (plik lub katalog) jest katalogiem aby można było potem posortować tak jak wcześniej napisałem??

Chyba, że trzeba to inaczej zrobić. Jak?

Z Góry dzięki i pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

11-07-2004 15:55
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Można to zrobić tak:

if (atrybutPliku and 16) = 16 then
'Katalog
else
'Plik
end if


_____________________________________________
www.mob.abc.pl - moja strona o VB

11-07-2004 16:00
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Ok dzięki. Oooo jaka szybka odpowiedź

Ale o co chodzi z tym 16. Czy będzie to działać na każdym kompie ?

Pozdrawim


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

11-07-2004 16:02
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Zamiast 16 można użyć vbDirectory. Jest to wartość stała.


_____________________________________________
www.mob.abc.pl - moja strona o VB

11-07-2004 16:14
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Ok wielkie dzięki. Już kapuję


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

11-07-2004 16:16
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Jelcyn
Admin forum




Typ: admin
Postów: 895
Zarejestrowany: Apr 2002


Ok dzięki. Oooo jaka szybka odpowiedź

Ale o co chodzi z tym 16. Czy będzie to działać na każdym kompie ?

Pozdrawim


trik polega na tym, że sprawdzasz atrybuty pliku. Katalog to taki specjalny plik, który ma ustawiony atrybut Directory na 1. Ponieważ atrybuty mają stan 0/1 więc w 1 bajcie można zakodować wszystkie atrybuty i z tąd ta 16-tka. Może trochę namieszałem, ale po przeczytaniu dowolnej książki do asemblera skapujesz mój wykład ;-)


_____________________________________________
Jelcyn
vb4all(małpka)canpol.pl
http://www.coderscity.pl/no-vb4all * http://www.jelcyn.com

12-07-2004 10:19
Pokaż profil Jelcyn  Wyślij email do Jelcyn   Odwiedź stronę Jelcyn       270849979    6237704
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Ok już wszystko kapuję

Tylko że zamiast 16 wykorzystałem stałą

FILE_ATTRIBUTE_DIRECTORY = &H10

To w sumie to samo, ale dzięki

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

12-07-2004 10:21
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

czy da się ustawć jakiemuś plikowi atrybut vbdirectory?

21-11-2004 13:18
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
Chudy
[TLHW]Wiktor



Typ: moderator
Postów: 574
Zarejestrowany: Aug 2002


czy da się ustawć jakiemuś plikowi atrybut vbdirectory?

A poco ?


_____________________________________________
Projekt "Thunder Cannons" nadchodzi...

23-11-2004 15:40
Pokaż profil Chudy  Wyślij email do Chudy   Odwiedź stronę Chudy       1220895
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Spod VB - nie, nie da się. W Windowsie z tego co wiem nie ma funkcji zdolnej to zrobić, już nawet MS-DOS się bronił przed takimi próbami.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

23-11-2004 17:44
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

a atrybut vbVolume i vbCompressed?

23-11-2004 19:15
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

vbVolume to raczje wogóle nie da sie nadać - to atrybut dysku .
O vbCompressed nigdy nie słyszałem.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

23-11-2004 20:07
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Usercontrol
mr. Tom



Typ: neutral
Postów: 191
Zarejestrowany: Oct 2003

vbCompressed to atrybut na dyskach zformatowanych na system NTFS. Gdy folder ma ten atrybut, jest automatycznie kompresowany aby oszczędzić miejsce

24-11-2004 16:07
Pokaż profil Usercontrol  Wyślij email do Usercontrol   Odwiedź stronę Usercontrol       1518548
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Możliwe, ale w MSDN nic na temat takiej stałej nie ma i ja też się z nią nigdy nie spotkałem. Ale jeśli to atrybut katalogu, to również nie da sie go pewnie nadać plikowi innemu niż katalog.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

24-11-2004 16:22
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Knight Lore''FC




Typ: neutral
Postów: 240
Zarejestrowany: Jan 2003

Nie wiem po co ktos chcial by nadawac plikowi atrybut katalogu - jedynym chyba powodem jest pisanie WIRUSA... Jezeli tak to sprawa jest w miare prosta (napisalem wirusa w VB i przetestowalem jego dzialanie w sieci lokalnej - kompy szybko padaly, ale wirus sie rozprzestrzenial szybciej...) Jak to zrobic ? bzzz - jak nadac plikowi atrybut katalogu - to jest odpowiedz

25-11-2004 02:45
Pokaż profil Knight Lore  Wyślij email do Knight Lore        1065423
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Nie wydaje mi się żbey było w ogóle możliwe nadawanie plikowi atrybutu Katalog a to dlatego, że atrybut ten wynika z samej struktury katalogu(mimo iż przez system też widziany jest jako plik)

Najlepiej poczytać jak się tworzy katalogi w Asemblerze i zmienić strukturę pliku, któryemu chcemy nadać atrybut katalogu na strukturę katalogu:

Dowiązanie Nazwa pliku lub katalogu
  2        .
  3        ..
  12        Windows
  15        command.com

itd.


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

25-11-2004 12:10
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Więc jest tak:

Katalog to jest zwykły plik. Dokładnie taki sam jak każdy inny. Od każdego innego różni się jednym bitem w opisie atrybutów - mianowicie jest zaznaczony jak DIRECTORY. Z technicznego punktu widzenia niczym więcej się nie różni. Oczywiście dane mają konkretną strukturę, ale to nie zmienia faktu, że pozostaje zwykłym plikiem.
Nie znam narzędzia czy komendy, tkóa wprost potrafiłaby usunać lub nadać atrybut DIRECTORY. Widzę dwie możliwości:
1) Wywołanie jakiegoś błędu (np. Norton Commander miał taki błąd, że kopiując katalog.. nie nadawał mu tego atrybutu).
2) Edycja atrybutów na poziomie zapisu na dysku. Ale bezpośrednio spod VB chyba nie da się czegoś takiego zrobić. Poza tym trzeba już wtedy mieć do tego odpowiednią wiedzę na temat struktur danych używanych w danym systemie plików (w naszym przypadku - FAT-12, -16, -32 i NTFS).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

25-11-2004 12:20
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 16 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1