amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > rekursives Verzeichniskopieren [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

11.02.2012, 22:55 Uhr

AGSzabo
Posts: 1663
Nutzer
Huhu,

meine Routine zum rekursiven kopieren eines Files oder Verzeichnisses samt Inhalt und Subdirs funktioniert nicht richtig. Es werden zwar alle Dateien und Verzeichnisse kopiert, aber Subdirs einer Ebene landen alle ineinandner statt nebeneinander. Kann mir jemand in Pseudocode oder C oder als Erklärung schreiben wie man da vor geht (ausführlich, mit Aufruf der Amiga-Funktionen Examine(), ExNext() usw)? Oder meine Asm Routine korrigieren. Der Ausgangspunkt soll ein Filename oder Verzeichnisname sein. Dann wird entschieden, ob ein File zu kopieren oder ein Verzeichnis zu erstellen ist (Examine) ...

code:
recursive_copy	; (we are in source dir)

		; d1 object name, may be dir or file
		; d2 destpathbuffer (with path in it)

	STRUCTURE	d,0
		APTR	d_objectname
		APTR	d_objectlock
		APTR	d_destpathbuffer
		APTR	d_fib
		APTR	d_newdirlock
		APTR	d_olddir
		LABEL	d_SIZEOF

		lea	-d_SIZEOF(a7),a7

		move.l	d1,d_objectname(a7)
		move.l	d2,d_destpathbuffer(a7)

		move.l	dosbase(pc),a6

		moveq	#DOS_FIB,d1
		moveq	#0,d2
		jsr	_LVOAllocDosObject(a6)
		move.l	d0,d_fib(a7)
		beq	.free_locals

		move.l	d_objectname(a7),d1
		moveq	#ACCESS_READ,d2
		jsr	_LVOLock(a6)
		move.l	d0,d_objectlock(a7)
		beq	.free_fib

		move.l	d0,d1
		move.l	d_fib(a7),d2
		jsr	_LVOExamine(a6)
		tst.l	d0
		beq	.unlock

		; add name part to destpath/

		move.l	d_destpathbuffer(a7),d1
		move.l	d_fib(a7),a0
		lea	fib_FileName(a0),a0
		move.l	a0,d2
		move.l	#PATHBUFFER_SIZE,d3
		jsr	_LVOAddPart(a6)

		move.l	d_fib(a7),a0
		tst.l	fib_DirEntryType(a0)
		bge	.dir

		; file

		move.l	d_fib(a7),a0
		move.l	fib_Size(a0),d3
		lea	fib_FileName(a0),a0
		move.l	a0,d1
		move.l	d_destpathbuffer(a7),d2

		bsr	copy_file
		bra	.rempart

.dir		; makedir in dest dir

		move.l	d_destpathbuffer(a7),d1
		jsr	_LVOCreateDir(a6)
		move.l	d0,d_newdirlock(a7)
		beq	.rempart

		; change into source dir

		move.l	d_objectlock(a7),d1
		jsr	_LVOCurrentDir(a6)
		move.l	d0,d_olddir(a7)

		; loop through dir entries

.dir_loop	move.l	d_objectlock(a7),d1
		move.l	d_fib(a7),d2
		jsr	_LVOExNext(a6)
		tst.l	d0
		beq	.if_end

		move.l	d_fib(a7),a0
		lea	fib_FileName(a0),a0
		move.l	a0,d1
		move.l	d_destpathbuffer(a7),d2

		bsr	recursive_copy

		bra	.dir_loop

.if_end

		; change into old dir

		move.l	d_olddir(a7),d1
		jsr	_LVOCurrentDir(a6)

		; unlock new dir

		move.l	d_newdirlock(a7),d1
		jsr	_LVOUnLock(a6)

.rempart	move.l	d_destpathbuffer(a7),d1
		jsr	_LVOFilePart(a6)
		move.l	d0,a0
		clr.b	(a0)

.unlock		move.l	d_objectlock(a7),d1
		jsr	_LVOUnLock(a6)

.free_fib	moveq	#DOS_FIB,d1
		move.l	d_fib(a7),d2
		jsr	_LVOFreeDosObject(a6)

.free_locals	lea	d_SIZEOF(a7),a7
		rts


Ich ahne der Fehler besteht darin, dass man aus einem Zielverzeichnis an der richtigen Stelle wieder raus gehn muss. Verschiedene Versuche das zu lösen haben bei mir aber nicht funktioniert.

ags
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.


[ Dieser Beitrag wurde von AGSzabo am 11.02.2012 um 23:32 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

11.02.2012, 23:52 Uhr

Thore
Posts: 2266
Nutzer
Hmmm vielleicht gehts so...

Du hast eine rekursive Funktion, diese listet nur die Dateien und Verzeichnisse die in einem angegebenen Verzeichnis sind.
Ist es ein File, wird es mit seiner Verzeichnisstruktur kopiert. Ist es ein Verzeichnis, wird die rekursive Funktion einfach selbst aufgerufen.

Ein Beispiel in Pseudocode:

code:
function RecCopy(MyPath, DestPath);
begin
  while MyFile=GetNextFile do begin
    if (MyFile is File) then Copy(MyFile, DestPath+MyFile)
    else RecCopy(MyFile, DestPath);
  end;
end;



MyFile beinhaltet hierbei immer seinen relativen Pfad. Copy legt die Unterverzeichnisse, welche in MyFile mit drin sind an.
Im Grunde wird hier eine Standard Tiefensuche verwendet.

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 00:05 Uhr

AGSzabo
Posts: 1663
Nutzer
@Thore:

> Ist es ein File, wird es mit seiner Verzeichnisstruktur kopiert. Ist es ein Verzeichnis, wird die rekursive Funktion einfach selbst aufgerufen.

Mache ich ja so. Ich blick nicht durch warum es trotzdem nicht geht, ist wohl ein Fehler in der Umsetzung.
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 11:01 Uhr

Doc
Posts: 355
Nutzer
FWIW, im Aminet gibt's noch mein 'dircmp'. Es wäre nicht so schwer, das entsprechend zu erweitern und in ASM umzusetzen.

http://aminet.net/search?query=dircmp
--
Ex Amiga-Computerist

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 13:58 Uhr

Thore
Posts: 2266
Nutzer
Das Erstellen der Verzeichniskette sollte so unabhängig wie möglich vom übrigen Code sein. Ich würde hier eine Subroutine vorschlagen mit Pointer auf den String der Verzeichniskette und dem current dir.
Dann in dieser Routine die Register retten, den string durchparsen und die Verzeichnisse entsprechend anlegen. Dann einfach nach dem Zurückschreiben der Register wieder aus dem Unterroutine zurückspringen.
Damit kommst du mit den Verzeichnissen auch nie durcheinander.

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 14:09 Uhr

AGSzabo
Posts: 1663
Nutzer
@Thore:

Ich verstehe nicht was Du mit "unabhängig" meinst, mache ich doch so, dass meine routine - die sich selbst auf ruft - am Anfang einen Zielfpfad und das CurrentDir erhält. Dazu noch den Namen des zu kopierenden Objekts im CurrentDir. Das kann eine File sein aber auch ein Verzeichnis.
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ Dieser Beitrag wurde von AGSzabo am 12.02.2012 um 14:10 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 15:01 Uhr

Thore
Posts: 2266
Nutzer
Okay sorum kannsts auch machen, daß das Zielverzeichnis erstellt sobald ein Verzeichnis gefunden wird, und dann rekursiv die Funktion mit diesem Verzeichnis aufgerufen wird.

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 15:28 Uhr

AGSzabo
Posts: 1663
Nutzer
Analyse hat ergeben:

Bild: http://images.quicktunnels.net/bac.png

Wenn es unter dem Verzeichnis "test" nur b, a und c gibt, funktioniert es. Sobald in b das Verzeichnis b_a erstellt wird, wird aus dem ganzen Baum das, was rechts abgebildet ist.
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 17:37 Uhr

AGSzabo
Posts: 1663
Nutzer
Gelöst!

Ich habe mir jetzt vor dem Selbstaufruf das Ende des gegenwärtigen Zielpfades gemerkt und danach wieder restoriert. Das Ende muß erst gesucht werden. Das gefällt mir nicht ganz, aber jetzt geht es prima..


code:
move.l	d_destpathbuffer(a7),d2
		; store current end of path

		move.l	d2,a0
.find_loop	tst.b	(a0)+
		bne	.find_loop

		push	a0

		bsr	recursive_copy

		; restore end of path

		pop	a0
		clr.b	-(a0)

		bra	.dir_loop




Auf zum nächstens Schritt. :)

--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ Dieser Beitrag wurde von AGSzabo am 12.02.2012 um 17:38 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 21:49 Uhr

inq
Posts: 445
Nutzer
@AGSzabo:

Entschuldige, daß ich das so direkt mitteilen muß:

Das wurde auch Zeit. Ich weiß nicht, warum du IMMER als erste aller Optionen statt selbst zu denken (und zwar länger als nur 2 Minuten) direkt und unmittelbar das Forum befragst.

Du bist ein talentierter, fähiger Programmierer. Es ist nicht nötig, dir für jeden deiner Schritte irgendwelche Zweitmeinungen einzuholen (ich glaube, ich habe das schonmal vor zwei Jahren oder so geschrieben).
Du bist offenbar in der Lage, Probleme (auch solch einfache wie dieses hier) SELBST zu lösen.
DARUM programmierst du doch (auch), oder?

Ich will NICHT, daß du dem Forum fernbleibst.
Ich würde es aber begrüßen, wenn du vermeiden könntest, die "Community" etwas weniger in alltägliche Programmiererfahrung (die du NICHT brauchst und also nur vorgibst) einzuflechten. Nur, um das Forum zu aktualisieren und die Höflichkeit und Toleranzgrenzen der Teilnehmer zu testen - no, thanx.

Vielleicht hat auch der ein oder andere hier ein erweitertes Geltungsbedürfnis, das es außerhalb der Knigge-Formeln zu befriedigen gilt---letzten Endes mußt du eine Menge Credits in "deinen" Code schreiben, nur weil du nicht die Ausdauer eines Non-TV-Junkies besitzt . ;)

inq

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 22:06 Uhr

AGSzabo
Posts: 1663
Nutzer
@inq:

Ach es wird doch überall so viel geredet über alles Mögliche. Warum nicht auch hier? Ich würde mir mehr Fragen auch von anderen Leuten wünschen, dann könnte ich mein Wissen weiter geben. Es ist auffällig wenn immer wieder bloß ich hier als Fragender auftrete. Andernfalls würdest Du es garnicht bemerken. Ich will kein Eigenbrötler sein und kein einsamer Spitzenreiter, sondern mich über meine Interessen und Fortschritte ganz normal und offen mitteilen wie bei jedem anderen Hobby auch. Ich glaube wir arbeiten zusammen: my code is your code. Und wenn einer etwas - wenn auch nur moralische - Unterstützung braucht, dann bin ich gerne bereit es zu geben. Bei mir ist das so, dass ich oftmals erst dann das Problem sehe, wenn ich darüber spreche, bzw schreibe. Und warum sollte das ein Selbstgespräch sein. Was ist das für eine Austausch-Plattform, wenn man bloß gesagt bekommt: mach es selbst. Ich, es fällt mir echt auf, bin hier fast der Einzige, der Programmierfragen stellt. Wäre das nicht so, gäbe es keine Verwunderung darüber, das glaube ich. Man sieht im AmiNet und auf Amiga-News bloß immer, wer wann welches tolles Programm geschrieben hat, aber davon abgesehen scheint das eigentliche Programmieren davon jedem seine Privatsache und "geheime Kunst" zu sein, das gefällt mir nicht ...

ags

ps: wenn Du wüsstest, was ich alles hier NICHT frage. Was ich hier Frage ist alles andere als "jeder Schritt". Du siehst nur die Spitze des Eisbergs! :D
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ Dieser Beitrag wurde von AGSzabo am 12.02.2012 um 22:10 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 22:47 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von AGSzabo:
@inq:
.... Man sieht im AmiNet und auf Amiga-News bloß immer, wer wann welches tolles Programm geschrieben hat, aber davon abgesehen scheint das eigentliche Programmieren davon jedem seine Privatsache und "geheime Kunst" zu sein, das gefällt mir nicht ...
...
ps: wenn Du wüsstest, was ich alles hier NICHT frage. Was ich hier Frage ist alles andere als "jeder Schritt". Du siehst nur die Spitze des Eisbergs! :D



Ich verstehe, was du meinst. Leider ist das die heutige Situation: Jeder "teilt" alles mit allen: Im vermeintlichen Bewußtsein, daß es sich bei den "Anderen" um nette Leute und Freaks und "User" handelt.

Das Problem hierbei ist aber: Alles, was du freigibst, ist "frei", veröffentlicht, der Quelle beraubt.

Alles, was du jetzt "frei" diskutierst, kann und wird später evtl. gegen dich in einem Patentstreit verwendet werden.
Weil du es selbst nicht erfunden/entdeckt hast.
Eben das "wir teilen alles"-Problem der "wir sind doch alle Freunde" Generation.
Und "Freund" hat den Sinn verloren. Genauso wie "mein" oder "Kunst".
Ersetzt allesamt durch "Klicki-Bunti-Kopie-Flashi-iLike".

Amen.

Fazit:
Grund genug für mich, Open-Src Quellen eben -so wie immer- stets nur als INSPIRATION zu verwenden --- APIs und Libs sind ok-Includes und soweiter bleiben beim Urheber.

inq




[ Dieser Beitrag wurde von inq am 12.02.2012 um 22:49 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 22:59 Uhr

AGSzabo
Posts: 1663
Nutzer
@inq:

Gibts bei Software neulich Patente? Mir wurde mitgeteilt ich könne meine "Hitomi-Methode zur Darstellung von in die Tora hinein kodierten Bildern" und das Programm dazu NICHT patentieren lassen. Aber notariell hinterlegt habe ich alles was ich in meinem Buch jetzt schließlich geschrieben habe. Urheberrechte gelten davon unabhängig.
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 23:11 Uhr

inq
Posts: 445
Nutzer
@AGSzabo:
Es geht (heute) noch nicht mal darum, ob man Software/Algorithmen patentieren kann:
Allein dadurch, daß das Wissen oder die Herleitung von bestimmten Lösungen "der Allgemeinheit bekannt" sind, schließt eine Patentierung (laut "Prior Art"oder noch übler) aus.
D.h. irgendjemand im "bösen Indien" gießt deine "neue Idee" in ein fertiges Programm, bevor du es tust - hihi, Pech gehabt, würde ich sagen. Klagen dagegen laufen ins Leere, da es ja um "allgemein bekanntes Wissen" geht.

Und ich erinnere (sehr gerne) in diesem Zusammenhang an die sog. Trivialpatente an das Zeichnen von Rechtecken, das Ein-Klick-Patent und Sachen wie "Datenaustausch zwischen Teilnehmern".

meint ein
(nicht paranoider)
inq

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 23:24 Uhr

AGSzabo
Posts: 1663
Nutzer
@inq:

Der Jemand im bösen Indien kann doch auch kein Patent auf allgemein bekanntes Wissen machen, oder hab ich dich mißverstanden? Ich meine, was ich nicht kann, kann/darf er auch nicht. Aber um das mal zu trennen:

- meine Hitomi-Methode ist spätestens seit dem Erscheinen meines Buches als mein geistiges Eigentum gesichert.

- was ich an sonstens programmiere gibts sowieso schon alles irgendwie

- das ganze linux ubuntu gnome etc IST quelloffen und noch nie hat es damit patentwitze gegeben ... oder?

ags
--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ - Antworten - Zitieren - Direktlink - ]

12.02.2012, 23:46 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von AGSzabo:
@inq:
Der Jemand im bösen Indien kann doch auch kein Patent auf allgemein bekanntes Wissen machen, oder hab ich dich mißverstanden? Ich meine, was ich nicht kann, kann/darf er auch nicht. ...

Es ist, genau genommen, anders herum: Es wird eine Software veröffentlicht (verkauft!!), gegen die DU nicht vorgehen kannst, weil es nicht patentierbar ist (weil die kleine feine tricky-quicky 68k-ASM-Routine 10 Jahre zuvor FREI für 7Mrd. Menschen zu lesen war-bis ins letzte Byte).
Zitat:
- meine Hitomi-Methode ist spätestens seit dem Erscheinen meines Buches als mein geistiges Eigentum gesichert.
Bis jemand mit mehr Geld etwas anderes "beweisen kann".
Zitat:
- was ich an sonstens programmiere gibts sowieso schon alles irgendwie
Genau. IRGENDWIE. Wenn deine RVS, deine Srccodes, eben alles darauf hinweist, daß du es SELBST entwickelt hast, dan IST es auch deines.
Es gibt nur SEHR wenige Varianten, ein Rechteck (sinnvoll) zu zeichnen.
Es gibt keinen Grund, eine Variante davon IN SRC zu kopieren. DAS kann man auch selbst schreiben; vielleicht machen ein paar Bytes später mal ein paar MIO ChinaEuros aus...

inq


[ - Antworten - Zitieren - Direktlink - ]

13.02.2012, 10:40 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von inq:
Es ist, genau genommen, anders herum: Es wird eine Software veröffentlicht (verkauft!!), gegen die DU nicht vorgehen kannst, weil es nicht patentierbar ist…

Hat er irgendwo geschrieben, dass er das will? Ich lese hier das genaue Gegenteil heraus: hätte er etwas dagegen, dass jemand sein Wissen verwendet, würde er es selbstverständlich nicht mit anderen teilen.
Zitat:
Zitat:
- meine Hitomi-Methode ist spätestens seit dem Erscheinen meines Buches als mein geistiges Eigentum gesichert.
Bis jemand mit mehr Geld etwas anderes "beweisen kann".
Ja ja, sicher.
Das heißt, die einzige Schutzmaßnahme, die ein Autor noch hätte, wäre, gar nichts zu veröffentlichen. Sehr sinnvoll.
Zitat:
Es gibt keinen Grund, eine Variante davon IN SRC zu kopieren. DAS kann man auch selbst schreiben; vielleicht machen ein paar Bytes später mal ein paar MIO ChinaEuros aus...
Huch, wo ist denn jetzt Deine Paranoia geblieben? Ich dachte, jemand mit genügend Geld kann eh „beweisen“, dass alles von ihm ist?

Im übrigen spielt es bei Patenten ohnehin überhaupt keine Rolle, ob Du den Source kopiert oder dieselbe Idee mit eigenhändig geschriebenen Code re-implementiert hast.

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

18.02.2012, 22:44 Uhr

inq
Posts: 445
Nutzer
Zitat:
Original von Holger:
Zitat:
Zitat:
- meine Hitomi-Methode ist spätestens seit dem Erscheinen meines Buches als mein geistiges Eigentum gesichert.

Bis jemand mit mehr Geld etwas anderes "beweisen kann".

Ja ja, sicher.
Das heißt, die einzige Schutzmaßnahme, die ein Autor noch hätte, wäre, gar nichts zu veröffentlichen. Sehr sinnvoll.

Das ist ein Mißverständnis. Wie wir alle wissen, geht es bei vielen Patentklagen nicht so sehr um den deutlichen Beweis einer klaren Patentverletzung, da Patente oftmals so vage formuliert sind, daß sie scheinbar auf alles Mögliche anzuwenden sind (Nostradamus läßt grüßen). Darum "beweisen kann". Und die erwähnte Methode muß (ohne jemandem nahe zu treten) keineswegs neu oder einzigartig sein. Auch wenn der vermeintliche Erfinder das glaubhaft versichert.
Demzufolge ist die Kernaussage des Zitats mit Vorsicht zu genießen.

Zitat:
Im übrigen spielt es bei Patenten ohnehin überhaupt keine Rolle, ob Du den Source kopiert oder dieselbe Idee mit eigenhändig geschriebenen Code re-implementiert hast.
Falsch.
Nur, wenn das Patent auf die Idee gilt, wäre das so. Bei der Verwirklichung einer (banalen, bekannten) Idee spielt sehrwohl der Source eine Rolle.
Ich habe nicht umsonst auf das Rechteckzeichnen verwiesen.

Übrigens,
ich hab' diesem Thread nur beigesenft, weil das eigentlich angesprochene "Problem" nur eine Denkblockade beschreibt, zu deren Lösung normalerweise kein Sourcecode nötig wäre. Immer dieses "teilhaben", "sharing" usw. wirkt auf mich immer etwas übertrieben.
Ich werde wohl alt! :D

inq

[ - Antworten - Zitieren - Direktlink - ]

18.02.2012, 22:53 Uhr

AGSzabo
Posts: 1663
Nutzer
@inq:

Wie ich schon schrieb, vermisse ich aber den regen Austausch. Wie man am Forum sieht, wäre hier mehr lost, würde ich nicht so aufallen. Du wirst nicht alt sondern das Thema ist nicht aktuell genug. Wer programmiert Amiga und die Wenigen, die es tun, warum jeder nur für sich selbst. Das war meine Kritik.

ps: auch Denkblokaden haben ein Recht auf Besprechung und Aussprache.

--
Author of Open eXternal User Interfaces, eXternal Format Rippers and the Book "Torakosmos". Developing with E-UAE on an Ubuntu dualcore system.

[ Dieser Beitrag wurde von AGSzabo am 18.02.2012 um 22:55 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > rekursives Verzeichniskopieren [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.