Seite 2 von 2

Re: Datei erstellen im Netz

Verfasst: Mi, 02. Sep 2020 13:43
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:

Re: Datei erstellen im Netz

Verfasst: Mi, 02. Sep 2020 14:14
von Manfred
ok

Re: Datei erstellen im Netz

Verfasst: Mi, 02. Sep 2020 17:14
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 ?

Re: Datei erstellen im Netz

Verfasst: Mi, 02. Sep 2020 19:16
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

Re: Datei erstellen im Netz

Verfasst: Do, 03. Sep 2020 8:10
von Rolf Ramacher
guten morgen stefan. danke - ich werde es mal testen

Re: Datei erstellen im Netz

Verfasst: Do, 03. Sep 2020 14:34
von Rolf Ramacher
Hallo Stefan

du da fehlt aber doch die Function StarteDatei()

Re: Datei erstellen im Netz

Verfasst: Do, 03. Sep 2020 17:07
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

Re: Datei erstellen im Netz

Verfasst: Fr, 04. Sep 2020 9:44
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

Re: Datei erstellen im Netz

Verfasst: Fr, 04. Sep 2020 9:45
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?

Re: Datei erstellen im Netz

Verfasst: Fr, 04. Sep 2020 10:53
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

Re: Datei erstellen im Netz

Verfasst: Fr, 04. Sep 2020 11:37
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.

Re: Datei erstellen im Netz

Verfasst: Fr, 04. Sep 2020 12:46
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.

Re: Datei erstellen im Netz

Verfasst: Fr, 04. Sep 2020 12:56
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)

Re: Datei erstellen im Netz

Verfasst: Fr, 04. Sep 2020 18:18
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) 290-mal heruntergeladen

Re: Datei erstellen im Netz

Verfasst: Mo, 07. Sep 2020 15:11
von Rolf Ramacher
Hallo Stefan

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

Re: Datei erstellen im Netz

Verfasst: Mo, 07. Sep 2020 15:20
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.