Archiv verlassen und diese Seite im Standarddesign anzeigen : Ordner auflisten
hey, mich würde mal interessieren, wie man in pascal den inhalt eines ordners auflistet..
der ordner ist folgendermaßen aufgebaut:
-Hauptordner
---Unterordner 1
---Unterordner 2
---Unterordner 3
---Unterordner 4
---Unterordner 5
---Unterordner usw
---Unterordner usf
heisst, das da immer mal ordner gelöscht werden und dazu kommen, also sollte er es dynamisch auflisten.
dann sollte man (wenn es denn möglich ist) auch die funktion haben, den ordner übers programm zu öffnen..
z.B:
1: [Unterordner 1]
2: [Unterordner 2]
3: [Unterordner 3]
usw..
halt wenn ich 1 drücke, öffnet sich unterordner 1..
wäre sowas zu schaffen? :O
marcomania
03.09.2005, 01:37
hallo,
den inhalt eines ornders aufzulisten, ist in pascal nicht so schwierig. meist liefert die unit dos das nötige mit. such mal nach searchrec, bzw. TSearchRec bei delphi. dieses record wird durch FindFirst und FindNext entsprechend mit den informationen des gefundenen ordners/datei aufgefüllt.
also ungefähr so:
var
Dir : SearchRec;
begin
FindFirst('*.*', archive, Dir);
while (DosError=0) do
begin
Writeln(Dir.Name);
FindNext(Dir)
end;
FindClose(Dir)
end.
in delphi sieht es aufgrund anderer konstanten ein klein wenig anders aus, ist aber vom prinzip her das gleiche.
was genau meinst du mit ordner öffnen?
gruß, marco.
Cyberpuer
03.09.2005, 09:27
Alle gefrundenen Ordner sollen mit einer Zahl verknüpft werden, deren Eingabe ein Öffnen verursacht. Habe leider keine Zeit, sonnst würe ich gerne helfen... Muss zu IFA.
hallo,
den inhalt eines ornders aufzulisten, ist in pascal nicht so schwierig. meist liefert die unit dos das nötige mit. such mal nach searchrec, bzw. TSearchRec bei delphi. dieses record wird durch FindFirst und FindNext entsprechend mit den informationen des gefundenen ordners/datei aufgefüllt.
also ungefähr so:
var
Dir : SearchRec;
begin
FindFirst('*.*', archive, Dir);
while (DosError=0) do
begin
Writeln(Dir.Name);
FindNext(Dir)
end;
FindClose(Dir)
end.
in delphi sieht es aufgrund anderer konstanten ein klein wenig anders aus, ist aber vom prinzip her das gleiche.
was genau meinst du mit ordner öffnen?
gruß, marco.
das klappt soweit, nur leider listet er nicht die unterordner auf, sondern nur die datein im oberordner
also statt
Unterordner1
Unterordner2
etc
dateix.zip
irgentwas.txt
was muss ich im code umändern?
Diogenes
03.09.2005, 11:55
ZEBU (http://www.coding-wiki.de/index.php/Codeschnipsel:Pascal#Plattform:_Windows) enthält, was du brauchst:
Das ist ein ZIP-File. Schau in der Datei ZWinDOS.PAS in der Funktion ForEachFile nach!
ZEBU (http://www.coding-wiki.de/index.php/Codeschnipsel:Pascal#Plattform:_Windows) enthält, was du brauchst:
Das ist ein ZIP-File. Schau in der Datei ZWinDOS.PAS in der Funktion ForEachFile nach!
joa das prob aber ist, ihc arbeite nicht mit borland
virtual pascal hab ich.. mir gefällt das interface da einfach 1000x besser
diese libary is aber für borland..
marcomania
03.09.2005, 12:13
ersetz das attribute archive in FindFirst durch anyfile (0x3F, bzw. $3F).
okay, wenn du mit öffnen meinst, den inhalt aufzulisten, würd ich auf anhieb vielleicht folgermaßen vorgehen:
procedure scan(apath : string; rec : Integer);
var dir : searchrec;
begin
findfirst(apath + '*.*', $3F, dir);
while (doserror = 0) do writeln(apath+dir.name);
if rec = 1 then begin findclose(dir); exit end;
repeat
write('Unterorndernr. angeben: ');
read(c); writeln;
case c of
'x' : break;
else scan(apath + 'Unterordner '+c+'/', 1);
end;
until c = 'x';
findclose(dir);
end;
begin
scan('C:\', 0);
end.
gruß, marco.
hm, bei dem beispiel mit $3F listet der zwar ordner, aber wieder die dateien..
der code funktioniert bei mir net :o
Error 74: Constant and case types don't match
bei der zeile:
case c of
'x' : break;
Diogenes
03.09.2005, 13:47
joa das prob aber ist, ihc arbeite nicht mit borland
virtual pascal hab ich.. mir gefällt das interface da einfach 1000x besser
diese libary is aber für borland..
Mag sein, aber analysiere den Code doch einmal, und bau' um. Ist ja nicht verboten :) Wenn VP auch nur ähnliche Funktionen verwendet, um Directory-Einträge auszulesen, müßt' es eigentlich klappen.
marcomania
03.09.2005, 13:59
hallo,
hab schon seit jahren nicht mehr mit pascal gearbeitet, kann keine garantie für den code geben :-\
c muss vom typ char sein. also
var
c : char;
dann sollte es klappen. aber wenn du mit virtual pascal unter windows arbeitest, dann schau mal nach TSearchRec. ich kenne die bibliotheken von virtual pascal leider nicht, aber die müssten eigentlich kompatibel zu freepascal/delphi sein.schau mal hier:
TSearchRec (http://www.delphibasics.co.uk/RTL.asp?Name=TSearchRec)
gruß, marco.
Mag sein, aber analysiere den Code doch einmal, und bau' um. Ist ja nicht verboten :) Wenn VP auch nur ähnliche Funktionen verwendet, um Directory-Einträge auszulesen, müßt' es eigentlich klappen.
ya, leider is da ein klitzekleines problem.........
ich prog erst seit 2 tagen aggressiv paascal :X
ich weiß noch fast GARNIX :s
mein ganzes wissen stammt von tutorials.at -_-
gibts noch gute sites mit tuts für anfänger? :o
Diogenes
04.09.2005, 08:21
Das weiß ich, ehrlich gesagt, nicht, weil ich mein Pascal zum Großteil aus dem Borland-Pascal-7-Handbuch und viel Coden gelernt habe. Gerade letzteres kann ich als Übung nur empfehlen :) Ich muß noch dazu sagen, daß ich viel Zeit vor einem Commodore 128 verbracht habe und daher im Coden generell Erfahrung habe, wenn auch "nur" mit CBM BASIC 7.
Aber ich will Dir kurz erklären, wie die Funktion ForDir funktioniert:
Zuerst werden alle Einträge. die kein Unterverzeichnis und keine Volume-ID sind, durchgegangen und die Aktion ausgeführt (zum Beispiel Auflisten - könnte aber auch etwas anderes sein).
Dann werden alle Unterverzeichnisse zusammengesammelt, ohne mit ihnen etwas zu tun.
Drittens wird die Funktion ForDir selbst rekursiv aufgerufen, um die Unterverzeichnisse zu untersuchen.
Am Schluß wird die Sammlung der Unterverzeichnisse wieder gelöscht, um den Speicher nicht volzumüllen.
Das war's schon. Alles andere ist schmückendes Beiwerk bzw. administrative Notwendigkeit. Welche Funktion jetzt zum Auslesen der Directory-Einträge benötigt wird, ist von der Pascal-Version und vom Betriebssystem abhängig. Für DOS/Windows ist es die FindFirst/FindNext-Kombination. Wenn Du mit VP unter Windows codest, such einmal nach diesen Funktionen, vielleicht findest Du was.
Das Zusammensammeln der Subdirectory-Einträge habe ich mit einem in der BP-Runtime-Library vorbereiteten Objekt gemacht. Da mußt du halt nehmen was da ist oder was neues coden.
Alle Klarheiten beseitigt?
*hust* des mir noch zuu hoch :p
gibts da noch gute tut-seiten? .. ausser tutorials.at :o
Diogenes
04.09.2005, 18:06
Blaggi, bitte denk Dir den Absatz noch einmal durch. Es ist wirklich nicht so schwer. Hast Du schon in anderen Sprachen gearbeitet?
Blaggi, bitte denk Dir den Absatz noch einmal durch. Es ist wirklich nicht so schwer. Hast Du schon in anderen Sprachen gearbeitet?
Naja, hab ein bissl VB (kein .NET) gearbeitet..
Nen Rechner hab ich gemacht
Nen kleinen TCP Chat über IP
Noch Mehr rechner..
Is aber mit VB zu einfach um es als Programmieren zu sehen
Habe ein klitzekleines bissl C, bin aber dran gescheitert..
Ich komm mit diesem "Borland <> alles andere" nich klar..
Da macht man ein auf Borland funktionierendes Programm, und stellt fest: nix da mit Dev-C++..
Geht nicht
Und auf Borland wechsel ich auf keinen fall.. das Userinterface von TurboC ist ja wohl unter aller sau..
Najaaa, sonst hab ich mich halt auf Pascal (Lernsprache) festgelegt, und wie gesagt, alles was ich weiss kommt von www.tutorials.at ..
Also kann ich gerademal Dateien lesen und schreiben.. nicht mehr (:
Und wo ich das gerade so sehe, gibt ja auch Borland Turbo Pascal... das Interface davon ist ebenfalls ne Katastrophe..
Ich nutz Virtual Pascal 2.1..
Gibts da jetzt auch diesen "Borland >VP" Problem?
Muss man für jede Sprache ein 3456574$ teueres Borland Programm kaufen?
/me durchdreht >_<
marcomania
04.09.2005, 22:39
Gibts da jetzt auch diesen "Borland >VP" Problem?
Muss man für jede Sprache ein 3456574$ teueres Borland Programm kaufen?
führt in diesem thread sicher zu weit, aber eine anmerkung und antwort auf die frage noch:
nein, es gibt für beinahe jede "allgemeine sprachimplementierung" mindestens einen freien compiler, der sich hinter kommerziellen varianten nicht zu verstecken braucht. in den skriptsprachen ist es oft so, dass sich sogar die freien sprachen weitgehend durchgesetzt haben. in erster linie php.
für pascal gibt es vor allem freepascal.org, sehr gut, hab ich bis vor einem jahr selbst viel mit gearbeitet. für c/c++ gnu c.
für den anfang tuts auch nen leistungsstarker editor, mit dem du deine quelltexte erstellen kannst. gruß, marco.
Diogenes
05.09.2005, 17:08
Was die User-Interfaces betrifft, kann man geteilter Meinung sein. Mir gefällt das des BP für Windows sehr gut, aber das ist jetzt nicht das Thema.
Was den Quellcode betrifft, ist Borland/Turbo ausgesprochen M$-spezifisch. Die Funktionen zum Auslesen der Verzeichniseinträge zum Beispiel sind nicht aus dem Ur-Pascal des Heiligen Niklaus und müssen sich daher von Plattform zu Plattform und von Compiler zu Compiler unterscheiden. Deswegen kann ich Dir, Blaggi, da leider nicht helfen. Die von mir gebrachte Funktion geht unter Windows jedenfalls klaglos. Ich dachte außerdem, sie könnte Dir beim Entwicklen Deiner Funktion helfen. Wie man Verzeichniseinträge ausliest, mußt Du allerdings selbst in deiner Doku nachschalgen und drumherum deine Funktion entwickeln. Ein bißchen Erfahrung im Programmieren hast du ja schon. Lerne aus Rückschlägen, und laß Dich nicht unterkriegen!
mit interface meine ich:
wenn man text eintippt, kommt das immer zackenweise...
man tippt: writeLn ('test');
und so kommt es:
writ
eLn
('T
est
');
halt immer schirttweise..... das nervt total..... und mein prog was auf virtual pascal läuft, läuft da nicht.....
im menü kann man nicht klicken.... für alles muss man alt+X machen... das ko*** mich an.....
wenn die schon programme machen, sollten die es ordentlich machen...
aber wenn sie es machen, knocken sie alle anderen compilers aus....
Turbo C: gotoxy(); geht
Dev-C++: gotoxy(); geht nicht
weil borland eben eigene header verwenden muss.....
ich würde zu gerne C lernen, aber dieses prob, dass borland dazwischenfunkt nervt... wenn man ein gutes programm machen will, MUSS man borland kaufen...... da den compilern ohne borland-header 8562756285618562875682658 funktionen fehlen........
/edit: nochmal getestet..
gotoxy geht nur in borland.....
mein dev-cpp meckert mich 24 mal mit "[Linker error] undefined reference to `gotoxy' "
Falls es hier immer noch um die Frage geht, wie man Files
und Verzeichnisse einzeln listen kann (oder z.B. nur
Verzeichnisse/Unterverzeichnisse) :
Diese Attribute (der Wert, den man bei FindFirst angibt)
besteht aus Bits und man kann einzeln anschalten, welche
Bits im File gesetzt werden sollen - bzw die Zahlenwerte
addieren:
$01 = Read Only (nur Lesen)
$02 = Hidden (versteckte Dateien)
$04 = System (Systemdateien)
$08 = VolumeID (Festplattenbezeichnung)
$10 = Directory (Verzeichnis)
$20 = Archive
(Deswegen ist "Anyfile" auch $3F - weil der ALLES findet.)
Das, was man braucht, um nur Verzeichnisse (oder "Ordner",
wie die Windows-User sagen...) zu bekommen, ist also $10.
Dabei sollte man beachten, daß man in jedem Fall immer das
File "." erhält und in allen Verzeichnissen außer dem
aktuellen das File ".."
(Wozu die da sind, dürfte jedem klar sein...)
Achtung: Files/Verzeichnisse/etc. werden nicht geordnet,
sondern werden in der Reihenfolge gefunden, in der sie auf
der Festplatte liegen. (D.h. wenn man sie geordnet will,
muß man das selber machen.)
Speziell zu dem Thema kannst mich einiges fragen - hab in
Pascal mal nen Norton-Commander-Clone gebaut, kenn mich
also wohl einigermaßen aus. (Supportet sogar lange
Dateinamen, wenn man's unter Windows startet.)
Die kleine Doku von Xpyder hat mir sehr geholfen, er listet jetzt wie eine Eins!
Vielen dank.
Kennt jemand zufällig ein paar gute Seiten mit Pascaltipps?
Oder kann mir ebend jemand die Synthax von "ShellExecute" geben? :)
Diogenes
02.10.2005, 09:36
Die befindet sich streng genommen auf den M$-API Seiten unseres Lieblings-Soft<wre-Konzernes, auch LSZ genannt, wenn auch in C-Syntax, aber hier im Anhang ist etwas aus den Borland-Pascal-Hilfeseiten, auch BP.HLP genannt :)
Was willst Du eigentlich aus den Infos machen?
Mal etwas von SWAG gehört?
Eine Zusammenstellung von Pascal Sourcen und -Anleitungen
zu den verschiedensten Themengebieten.
Aber glaub, daß ich die auch bald mal auf meine Seite
stelle, genau wie Ralph Browns Interrupt List und die
ASM86FAQ.TXT.
(Ist nur so: Hab nur nen Modem, muß mir ne Weile Zeit
nehmen für den Upload.)
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.