Datei erstellen im Netz

Fragen rund um diverse Windows-Versionen, ihr Verhalten unter Xbase++ und den Umgang mit der API

Moderator: Moderatoren

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von Tom »

Okay, lasst uns eine Liste mit möglichen Ursachen zu dieser präzisen Problembeschreibung machen. Ich übernehme die ersten tausend, dann kann jemand anderes einsteigen. :doubt:
Herzlich,
Tom
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21165
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Datei erstellen im Netz

Beitrag von Manfred »

ok
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Datei erstellen im Netz

Beitrag von AUGE_OHR »

hi,
Rolf Ramacher hat geschrieben: Mo, 31. Aug 2020 15:37 mit FCreate erhalte ich die Meldung Fehler beim Schreiben, copy to funktioniert auch nicht - Fehler 3 Pfad nicht gefunden. ist aber in der Datenbank richtig eingestellt z:\import
sag mal wie heisst die "Quell" Datei ? (voller Path)

Ihr geht davon aus das die Fehlermeldung sich auf das "Ziel" bezieht aber wie sieht die "Quelle" aus ?
gruss by OHR
Jimmy
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Datei erstellen im Netz

Beitrag von mini990 »

Hab jetzt mal nachgeschaut. Das Problem trat auf Windows 7 32-Bit Systemen auf.
Der Laufwerksbuchstabe wurde nicht gefunden, daher DOS Fehler 3 bzw. File() Rückgabe .F.

Gelöst hatte ich das damals mit einer Laufwerkszuweisung

Code: Alles auswählen

FUNCTION SetzeNWLW(cPfad)
LOCAL cLW := ""
LOCAL aLWName := { "Z:", "Y:", "X:", "W:", "V:", "U:", "T:", "S:", "R:", "Q:", "P:", "O:", "N:", "M:", "L:", "K:", "J:", "I:", "H:", "G:", "F:", "E:", "D:" }
LOCAL nCounter := 1
FOR nCounter = 1 to 23
		If GetDriveType( aLWName[ nCounter ] ) = 1
				cLW := aLWName[ nCounter ]
				StarteDatei( "/C START NET USE " + cLW + " " + cPfad )
*				RunShell("/C START NET USE " + cLW + " " + cPfad , , .f., .F.)
				Exit
		Endif
Next nCounter
RETURN cLW
FUNCTION KillNWLW( cLW )
RunShell("/C START NET USE " + cLW + " /DELETE /YES" , , .f., .F.)
RETURN NIL

Danach trat das Problem nicht mehr auf....
Vielleicht hilft's?

Gruß Stefan
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von Rolf Ramacher »

guten morgen stefan. danke - ich werde es mal testen
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von Rolf Ramacher »

Hallo Stefan

du da fehlt aber doch die Function StarteDatei()
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Datei erstellen im Netz

Beitrag von mini990 »

Die ist von Werner....

Code: Alles auswählen

FUNCTION StarteDatei(cDatei, cArt, cDir, cPara)
// Bsp.: StarteDatei("explorer.exe", , , "c:\windows\logs")
// Bsp.: StarteDatei("www.web.de")
// Bsp.: StarteDatei("calc.exe")
RETURN ShellExecute(NIL, if(cArt == "D", SHELL_PRINT, SHELL_OPEN), cDatei, cPara, cDir)
Und hier noch Laufwerkfunktionen:

Code: Alles auswählen

***********************************************************************************************************************************
***                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ***
*** FUNCTION GetDriveType(cDrive)                                                                                                                                                                                                                                                                                                                                                                                                ***
***                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ***
***        Art des Laufwerks ermitteln                                                                                                                                                                                                                                                                                                                                                                                                  ***
***                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        ***
***        Rückgabewerte:                                                                                                                                                                                                                                                                                                                                                                                                                                                        ***
*** "UNKNOWN"           0 The drive type cannot be determined.                                                                        ***
*** "NO_ROOT_DIR"       1 The root path is invalid; for example, there is no volume mounted at the specified path.                    ***
*** "REMOVABLE"         2 The drive has removable media; for example, a floppy drive, thumb drive, or flash card reader.              ***
*** "FIXED"             3 The drive has fixed media; for example, a hard disk drive or flash drive.                                   ***
*** "REMOTE"            4 The drive is a remote (network) drive.
*** "CDROM"             5 The drive is a CD-ROM drive.
*** "RAMDISK"           6 The drive is a RAM disk.
* Aufruf
* GetDriveType("C:")
*
FUNCTION GetDriveType(cDrive)
LOCAL nDll,nType
nDll := DllLoad("Kernel32.dll")
IF nDll > 0
		nType := DllCall(nDll,DLL_STDCALL,"GetDriveTypeA",cDrive)
		DllUnload(nDll)
ENDIF
RETURN nType

*** UNC Name des Laufwerks ermitteln
*
* Rückgabe UNC-Pfad bzw. Laufwerksbuchstabe
* Aufruf:
* GetUNCName("C:")
*
FUNCTION GetUNCName(cDevice)
Local cServerName:=Space(512)
Local nLength    :=512
LOCAL nLastError := 0

cDevice:=Upper(AllTrim(StrTran(cDevice,':','')))+':'

nLastError  :=DllCall( "Mpr.Dll", DLL_STDCALL, "WNetGetConnectionA", @cDevice, @cServerName, @nLength )
nLength     :=At(Chr(0),cServerName)
If nLength>0     //!Empty(cServerName)
		cServerName:=Left(cServerName,nLength-1)
Else
		cServerName:=cDevice
EndIf
Return AllTrim(cServerName)
Gruß Stefan
Benutzeravatar
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 188
Registriert: Di, 24. Jul 2007 9:17

Re: Datei erstellen im Netz

Beitrag von Scarmo »

Ich hänge mich mal an, weil es irgendwie zum Thema passt:
Wie kopiert ihr Dateien aus dem Programm auf einen UNC-Pfad? Gibt es dazu eine elegante Lösung ohne RunShell()?

Gruss
Marco
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von Tom »

Hallo, Marco.

Kannst Du die Frage präzisieren? Ich habe grundsätzlich - weder bei Verwendung einer DBE, noch bei Low-Level-Dateioperationen - irgendein Problem mit UNC-Pfaden. Welches hast Du?
Herzlich,
Tom
Benutzeravatar
Scarmo
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 188
Registriert: Di, 24. Jul 2007 9:17

Re: Datei erstellen im Netz

Beitrag von Scarmo »

Es geht mir darum, beispielsweise eine Sicherung der Datenbanken auf einen UNC-Pfad zu machen. Ich verwende xClass, wobei ich mit CopyFile() Dateien beliebig kopieren kann (aber eben nur unter der Voraussetzung, dass es sich um gemappte Laufwerke handelt und nicht um einen UNC-Pfad). Aber vielleicht sehe ich auch den Wald vor lauter Bäumen nicht mehr...

Gruss
Marco
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von brandelh »

Bei Batchdateien ist es so, dass die Zielangaben von XCOPY oder COPY oder ROBOCOPY einfach als UNC angegeben werden können.
NUR die CMD selbst (also der Ausführungsort) muss auf einem gemappten oder lokalen Laufwerk liegen.

copy "\\server\freigabe\Datei*" "\\ziel\freigabe\zielver\*"

in Xbase selbst können alle Variablen UNC Namen im Pfad enthalten.
Gruß
Hubert
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von Tom »

Man muss da auch nix in Anführungszeichen setzen, Hubert. Das ist nur erforderlich, wenn Datei- oder Verzeichnisnamen Leerzeichen enthalten.

Code: Alles auswählen

copy \\mydomain\data\txt\text.txt .
funktioniert.

Code: Alles auswählen

copy \\mydomain\data\txt\schriller text.txt .
funktioniert nicht, dafür dann das hier:

Code: Alles auswählen

copy "\\mydomain\data\txt\schriller text.txt" .
Das gleiche gilt für Low-Level-Dateifunktionen, FileCopy, CopyFile COPY TO, DbUseArea, INDEX ON usw. in Xbase++-Anwendungen, mindestens seit Version 1.9. Wenn XClass das anders macht, gibt es möglicherweise eine Plausibilitätsprüfung, die am doppelten Schrägstrich oder am fehlenden Laufwerksbezeichner mit Doppelpunkt scheitert.
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von brandelh »

Tom hat geschrieben: Fr, 04. Sep 2020 12:46 Man muss da auch nix in Anführungszeichen setzen, Hubert. Das ist nur erforderlich, wenn Datei- oder Verzeichnisnamen Leerzeichen enthalten.
das weiß ich wohl, habe es aber eingefügt, da die Verzeichnisnamen (hier nur Platzhalter) ja unbekannt sind ;-)
Es ist nie falsch 8)
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Datei erstellen im Netz

Beitrag von AUGE_OHR »

hi

zum kopieren, moven, löschen oder umbenennen von Dateien nehme ich ShfileOperation wie der Explorer
https://docs.microsoft.com/en-us/window ... operationa

es ist schade das Alaska solche Windows Sachen nicht unterstützt und man Ot4xb nutzen muss für die SHFILEOPSTRUCTA structure
https://docs.microsoft.com/en-us/window ... eopstructa

hier die Ot4xb Version von Pablo
SHFILEOPERATION.zip
need Ot4xb
(2.33 KiB) 283-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
Rolf Ramacher
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1930
Registriert: Do, 09. Nov 2006 10:33
Wohnort: Bergheim
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von Rolf Ramacher »

Hallo Stefan

beim compilieren wird die shellexecute angemeckert. fehlt eine include CH-Datei ?
die dll.ch ist eingebunden
Gruß Rolf

Mitglied der Gruppe XUG-Cologne
www.xug-cologne.de
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Datei erstellen im Netz

Beitrag von Tom »

Hallo, Rolf.

Ich glaube, Du tust Dir nicht unbedingt einen Gefallen, wenn Du versuchst, aus Deiner Anwendung heraus ein Laufwerk zu mappen, das eigentlich schon gemappt sein sollte (und wahrscheinlich auch ist). Sollte das gelingen, wirst Du möglicherweise Speicherorte durcheinanderbringen und/oder laufenden Applikationen die Datenbasis wegziehen. Du solltest Dir wenigstens in einem kleinen Testprogramm anschauen, was da passiert, und vielleicht bei dieser Gelegenheit in diesem kleinen Testprogramm auch einfach mal Dein Problem nachstellen, nebst ganz viel Debugging auf Deinen Datei- und Verzeichnisnamen. Ich würde immer noch halbmittelwichtige Körperteile dafür ins Feuer legen, dass wir hier eigentlich über einen Typo reden, und dass Stefans Code, mit dem man irgendwie auch eine Laufwerksfreigabe verbogen bekommt, einer kleinen Atombombe gleichkommt, die man gegen Kopfläuse einsetzt.
Herzlich,
Tom
Antworten