[gelöst] ChDir und MkDir

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

[gelöst] ChDir und MkDir

Beitrag von Schwedenbitter »

Hallo,

ich habe ein Problem mit ChDir und MkDir. Hierzu habe ich bereits zwei Threads gefunden. Allerdings sind diese älter und Lösungen für mein Problem konnte ich dort leider auch nicht finden.

Ich habe einen Speichern-Dialog gebaut und möchte die zu speichernden Dateien nach den Angaben der Nutzer in bestimmte Verzeichnisse verteilen. Es kommt hinzu, dass diese auf einem Zentralen Server gespeichert werden sollen und der Pfad (unter Windows) z.B. das Format "\\Server\F\Eigene Dateien\Text\ohne Akte" aufweist. Vorab möchte ich natürlich überprüfen, ob das Verzeichnis bereits existiert. Da ich den Befehl PathExist (M$ Office VB) im OOO-Basic nicht finden konnte, habe ich folgende Alternative probiert:

Code: Alles auswählen

	Dummy = "\\Server\E\Eigene Dateien\Texte\ohne Akte"
	ChDir Dummy
	If CurDir <> Dummy Then
		MkDir Dummy
		ChDir Dummy
	End If
	msgbox CurDir
Obwohl ich keine Fehlermeldung bekommen, erhalte ich bei Aufruf des Befehls CurDir immer das aktuelle Verzeichnis. Selbst wenn ich als Verzeichnis bei Dummy mit "C:\" angebe, bleibe ich im aktuellen Verzeichnis. Meine "Sicherheitsabfrage" kann damit natürlich auch nicht funktionieren.

Hat jemand eine Idee; auch in Bezug auf PathExist
Zuletzt geändert von Schwedenbitter am Do, 09.11.2006 11:34, insgesamt 1-mal geändert.
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey Schwedenbitter,

also, bei chDir () bin ich mir nicht sicher, ob der Befehl überhaupt iimplementiert ist. CurDir() liefert dir immer den aktuellen Pfad - soweit OOo diesen schon hat (teilweise unzuverlässig).
Ich glaube, die beiden sachen bringen dich nicht weiter. Ich teste einen existierenden Pfad wie folgt:

Code: Alles auswählen

sub PfadTest
s = "file:///d:/meinTest/Unterverezichnis/"
if dir(s) <> "" then 
  msgbox "Pfad existiert"
else
   msgbox "Pfad existiert nicht"
end if
end sub
Dir() liefert den String des Pfades zurück, ist der leer, gibt es den Pfad nicht, sonst ja.
Du kannst den Pfad entweder in URL-Schreibweise (empfehlenswert) übergeben, aber auch lokalisiert - also passend zum Betriebssystem.

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Beitrag von pmoegenb »

Hallo,

Sun schreibt dazu im Programmierhandbuch:
Mit StarOffice 8 stehen einige DOS-spezifische Datei- und
Verzeichnisfunktionen nicht mehr oder nur noch eingeschränkt zur Verfügung. So
fehlt beispielsweise die Unterstützung der Funktionen ChDir, ChDrive und CurDir.
In Funktionen, die Dateieigenschaften als Parameter erwarten (etwa zur
Differenzierung von versteckten Dateien und Systemdateien), werden einige
DOS-spezifische Eigenschaften nicht mehr verwendet. Diese Änderung wurde
notwendig, um eine möglichst hohe Plattformunabhängigkeit für StarOffice
sicherzustellen.
Anscheinend wird der Verzeichniswechsel über Dir vorgenommen. Leider gibt das Handbuch nichts darüber her, ob auch Unc-Pfade möglich sind (\\Server\E etc.), oder ein Laufwerk vorausgesetzt wird.
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Beitrag von Schwedenbitter »

Danke für die schnellen Antworten!

@Toxitom

Habe es wie vorgeschlagen gemacht. Wenn das Verzeichnis nicht existiert, kommt jetzt eine Fehlermeldung. Allerdings möchte ich dann probieren, es erstellen zu lassen. Selbstverständlich ist nicht sicher, ob das überhaupt geht, weil ich ja auf den Server im Netz Zugriff haben muss (s.o.). Hier ist jetzt mein nächstes Problem:

Ich habe im Forum und auch in der Hilfe bei OpenOffice.org nirgends einen Hinweis finden können, wie ich die bei MkDir denkbaren Fehlermeldungen (5 Invalid procedure call und
76 Path not found)
abfangen und auswerten kann. So geht es jedenfalls nicht:

Code: Alles auswählen

IOError = MkDir('Z:\Test')
Wenn Z: nicht verbunden ist, bekomme ich trotzdem eine Fehlermeldung, die ich aber nicht haben will, weil ich mich selber um den Ernstfall kümmern möchte. Kannst Du mir aus dem Stehgreif sagen, wie ich die Fehlercodes abfrage und – was wichtiger ist – eine Meldung unterbinde?

Habe mein Projekt im Grunde fertig.
Bis auf die Sache mit dem Verzeichnis, dem Problem, dass ich Writer noch beibringen muss, dass schon gespeichert wurde (der Status von isModified() wird scheinbar nicht zurückgesetzt, so dass Writer nochmals seinen Speichern-Dialog bringt) und dass ich bei Abbrechen immer noch nicht weiß, wie man das endgültige Schließen des Dokuments unterbindet.

Eventuell findet sich jemand, dem ich meine Datei mal zukommen lassen kann. Ich würde dann auch die entsprechenden Passagen mit Kommentaren versehen, dass sich niemand den ganzen Code zu Gemüte führen muss.

@ pmoegenb

UNC-Pfade funktionieren prima. Habe es einfach ausprobiert!
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Beitrag von ykcim »

Hi,

eigentlich werden bei Fehlern Fehlercodes erzeugt die man abfragen kann.
Nur ist die anscheinend bei mkdir nicht der Fall. In dem Fall kommt 0 als Code. Trotzdem kannst Du über die Error Schleife die Meldung abfangen.

Code: Alles auswählen

   On Error Goto ErrorBehandlung
    mkdir "G:\test"
   Exit Sub
   ErrorBehandlung:
   MsgBox "Error " & Err & ": " & Error$ & " (Zeile : " & Erl & ")"
   MsgBox "Mkdir nicht ausgeführt"
Weitere Info zu Fehlerbehandlung stehen hier:
http://www.starbasicfaq.de/WiekannmanFe ... ngen..html

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Beitrag von Schwedenbitter »

@Alle
Danke für Eure Hilfe! :D

1. Mein Problem mit der Abfrage der FehlerCodes ist gelöst, dank ykcim.

2. Dem Writer habe ich auch beigebracht, dass schon gespeichert wurde. isModified ist vermutlich ReadOnly. So geht es:

Code: Alles auswählen

	oDoc = ThisComponent
	oDoc.Modified = False
Ich habe das sogar insoweit perfektioniert, dass nicht mehr automatisch gespeichert wird, sondern der Nutzer Änderungen auch verwerfen kann. Dazu lasse ich den Original-Dialog vom Writer wieder zum Zuge kommen.

Jetzt habe ich nur noch mein drittes und letztes Problem, dass bei einem Click in meinem Formular auf Abbrechen das Schließen des Dokuments unterbunden wird. Mit

Code: Alles auswählen

MsgBox oDoc.DBG_Properties
habe ich jedenfalls keine Attribute entdeckt, denen ich diese Fähigkeit zusprechen würde. Aber irgendwann bekomme ich das Problem auch noch irgendwie raus! :mrgreen:
OpenOffice.org 2.0.2 (stable)
OpenOffice.org 2.0.3 (update am 06.07.2006)
...
OpenOffice.org 4.1.1 (seit August 2014)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Jetzt habe ich nur noch mein drittes und letztes Problem, dass bei einem Click in meinem Formular auf Abbrechen das Schließen des Dokuments unterbunden wird.
Und das verstehe ich die ganze Zeit schon nicht, wenn das Dokument nicht geschlossen werden soll schließe es einfach nicht.
Mir ist zwar ohnehin nicht klar worum es geht, bzw. wie das irgendwas in die Richtung geht, nur warum führst Du überhaupt erst eine Situation herbei in der sich das Dokument anscheinend (selbsttätig) schließt um dann nach einer Lösung zu suchen wie Du das (nachträglich) verhindern kannst.
Mit Code:
MsgBox oDoc.DBG_Properties
habe ich jedenfalls keine Attribute entdeckt, denen ich diese Fähigkeit zusprechen würde
das ist ja wohl auch kaum zu erwarten das es eine Eigenschaft gäbe die etwa lautete:

Ich_bin_gerade_dabei_mich_zu_schliessen_soll_ich _das_fortsetzen (True/False)


Gruß
Stephan
Schwedenbitter
**
Beiträge: 47
Registriert: So, 25.06.2006 13:03
Wohnort: Finsterwalde, Brandenburg

Beitrag von Schwedenbitter »

Toller Witz:
Ich_bin_gerade_dabei_mich_zu_schliessen_soll_ich _das_fortsetzen (True/False)
Aber Spaß beiseite:
Meine Vorstellung ist nicht auf meinem Mist gewachsen. Wenn man ein stinknormales Dokument über das Kreuz schließt, dann kommt beim OpenOffice Writer - und nicht nur dort - ein Abfrageformular mit Buttons für die Optionen "Speichern", "Verwerfen" oder "Abbrechen".
Was ist nun schlimm daran, wenn ich genau das nachbilden will? Zumal nicht ich das Ereignis Dokument-Schließen herbeiführe, sondern der Benutzer. Und die "Erbauer" vom Writer werden sich auch was dabei gedacht haben. Kommt ja mal vor, dass ein Benutzer aus Versehen auf das Kreuz drückt.

Ich bekenne mich insoweit schuldig, als ich meine 3 Probleme auf 2 Threads verteilt habe und aus Versehen hier das dritte Problem ohne Bezug hierauf angesprochen habe.
OpenOffice.org 2.0.2 (stable)
OpenOffice.org 2.0.3 (update am 06.07.2006)
...
OpenOffice.org 4.1.1 (seit August 2014)
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Was ist nun schlimm daran, wenn ich genau das nachbilden will?
Das weiß ich nicht, es war auch nicht Thema meines post's, dort war Thema das ich nicht verstand was Du willst (oder Warum Du es willst) und das ich versucht habe es herauszufinden.
Aber ich sehe Nachfragen Eines bisher_nicht_das_Problem_verstehend_Habenden sind nicht erwünscht ... kein Problem.



Gruß
Stephan
Antworten