Announcement

Collapse
No announcement yet.

fopen() im Netzwerk

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • fopen() im Netzwerk

    Hi,

    Windows XP, ServicePack 3
    Programmiersprache: C bzw. C++

    Problem:
    ich möchte über das Netzwerk eine Datei zum lesen öffnen.

    Der Filename (Pfad) lautet: "\\\\NOTEBOOK\\D\\MYDIR\\MyDatei.bin"

    Bei einem Rechner funktioniert der Aufruf, bei einem anderen wird nach ca. 30 sec ein NullPointer zurückgegeben. GetLastError() liefert 0 zurück

    Auf beiden Rechnern ist der gleiche User mit gleichem Password angelegt. Das Laufwerk ist freigegeben und Lese-/Schreib-Rechte sind erteilt.

    Vielen Dank für eine Hilfestellung!

    Dieter

  • #2
    Hallo Dieter,

    kannst Du die Datei z.B. mit 'nem Editor öffnen (von dem Rechner aus, auf dem das C++-Programm streikt)?

    Scheint mir eher ein Zugriffsproblem als ein Problem der Programmierung.

    Gruß Knut

    Comment


    • #3
      Bei einem Rechner funktioniert der Aufruf, bei einem anderen wird nach ca. 30 sec ein NullPointer zurückgegeben.
      Sicherlich ist das kein Programmierproblem.
      Christian

      Comment


      • #4
        Hi,

        ja, das ist kein Programmier-Problem sondern ein Problem des richtigen Hinschauens. Nicht der LW-Buchstabe sondern der Freigabename muss eingesetzt werden.

        MFG

        Dieter

        Comment


        • #5
          Nicht der LW-Buchstabe
          Den man auch als Freigabenamen nehmen kann
          Christian

          Comment


          • #6
            Hallo!

            Will das Thema nochmal hochholen.
            Ich hab hier folgende Konstellation:
            Gewisse Directorys eines Servers sind auf den lokalen Maschinen als Netzlaufwerk gemountet. Der Laufwerksbuchstabe dieses Netzlaufwerks kann variieren. Auf jeder Maschine läuft eine exe, die ist auch lokal gespeichert. Diese exe soll auf ein File zugreifen, dass auf dem Server liegt.
            Ich will vermeiden, dass der User den Pfad per Opendialog angeben muss. Der Ort auf dem Server ist immer derselbe, deshalb würde ich das File am liebsten per IP addressieren. Hab diverse Dinge versucht, klappt aber nicht.
            Der Server ist die 192,.168.240.96, das File ist zum Beispiel
            file://192.168.240.96/Ft/Autolog/settings.txt
            Geb ich obere Zeile in den InternetExplorer ein, funktioniert dass von manchen Maschinen aus, von manchen nicht, obwohl die Datei eindeutig von der Maschine aus zu erreichen ist (kann die Datei im Dateiexplorer öffnen). Keine Ahnung, woran das liegt, der User ist jeweils immer in derselben Gruppe, ansonsten ist eigentlich auch alles identisch.

            Ich glaub aber, dass fopen() wohl auch nicht den "file://..." verträgt, lokale Pfade sind ja z.B. "C:\\Programme\\..."

            Ehrlich gesagt hab ich überhaupt keine Ahnung, wie ich mittels der IP und fopen zum Ziel kommen kann, der OpenDialog gibt ja den gemounteten Netzlaufwerkbuchstaben zurück.
            Kann mir jemand einen Beispielstrinng geben?

            Danke im Voraus und viele Grüße!

            Comment


            • #7
              Der Zugriff über file:// wird nur im IE funktionieren. Fopen kann damit nix anfagen. Wenn dann musst du über Shares gehen. Und bietet fopen auch keinen Auto-Login. Das macht der Windows Explorer im Hintergrund. Hier müsstest du mit Net share-API dein Logon auf den Server vor dem Aufruf von fopen durchführen.

              Comment


              • #8
                Der Logon auf dem Server wird auf der lokalen Maschine automatisch beim Start gemacht, insofern brauche ich mich darum (glaube ich) nicht zu kümmern, oder?
                Wenn dann musst du über Shares gehen.
                Hast du da ein Beispiel? Wenn ich "share" in meiner Hilfe eingebe, werde ich von Hilfethemen erschlagen

                Comment


                • #9
                  Originally posted by bodo2407 View Post
                  das File ist zum Beispiel
                  file://192.168.240.96/Ft/Autolog/settings.txt

                  Ich glaub aber, dass fopen() wohl auch nicht den "file://..." verträgt, lokale Pfade sind ja z.B. "C:\\Programme\\..."
                  file://
                  http://
                  ftp://

                  sind protocol angaben fuer ein browser. fopen() kennt dass nicht. Dass gab es dann noch nicht.


                  Ehrlich gesagt hab ich überhaupt keine Ahnung, wie ich mittels der IP und fopen zum Ziel kommen kann, der OpenDialog gibt ja den gemounteten Netzlaufwerkbuchstaben zurück.

                  ... Filename (Pfad) lautet: "\\\\NOTEBOOK\\D\\MYDIR\\MyDatei.bin"
                  Ip adresse wie computername.

                  char dateiname [] = "\\\\192.168.240.96\\Ft\\Autolog\\settings.txt ";

                  Comment


                  • #10
                    char dateiname [] = "\\\\192.168.240.96\\Ft\\Autolog\\settings.txt ";
                    Das war das erste, was ich probiert habe, aber fopen gibt immer NULL zurück. Zugriff auf die Datei habe ich aber, kann sie im Windows Explorer öffnen.
                    Woran kann das liegen?

                    Comment


                    • #11
                      Weil der Zugriff auf die Daten eben nicht mit den Mitteln des BS erfolgt. Vielmehr ist ja hier noch ein Übertragungsprotokoll (der Zugriff von Rechner zu Rechner NFS) dazwischen. Der Explorer kapselt dieses; fopen nicht

                      Versuch mal mit CreateFile aus der WIN32 API zu arbeiten
                      Christian

                      Comment


                      • #12
                        Originally posted by bodo2407 View Post
                        Das war das erste, was ich probiert habe, aber fopen gibt immer NULL zurück. Zugriff auf die Datei habe ich aber, kann sie im Windows Explorer öffnen.
                        Woran kann das liegen?
                        Bei mir tut fopen() dass alles sehr fein.

                        ..der OpenDialog gibt ja den gemounteten Netzlaufwerkbuchstaben zurück.
                        Es gibt meistens kein Buchstaben. Nur wenn die von Hand angelegd sind.

                        Mit TOpenDialog kanst du ip adressen benutzen. Wenn du dass tuest enthaelt OpenDialog1->FileName auch diese ipadresse.

                        Code:
                               OpenDialog1->InitialDir = "\\\\192.168.240.96";
                         
                              if ( OpenDialog1->Execute() )
                                     ShowMessage ( OpenDialog1->FileName );
                        Denke dass TStringList etwas anderes wie fopen() benutzt.

                        Nimme mahl ein TMemo auf dein form und versuche es mit

                        Memo1->Lines->LoadFromFile ( filename );
                        Zuletzt editiert von Christian Marquardt; 25.11.2009, 13:29.

                        Comment


                        • #13
                          Versuch mal mit CreateFile aus der WIN32 API zu arbeiten
                          Hab ich so mal probiert:

                          Code:
                          AnsiString AStemp;
                          HANDLE hvorlage;
                          
                          AStemp="\\\\192.168.240.96\\Ga\\uart.txt";
                          hvorlage=CreateFile(AStemp.c_str(),GENERIC_READ,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
                          if(hvorlage==INVALID_HANDLE_VALUE){
                          	ShowMessage("IHV");
                          	}
                          Ergebnis: IHV poppt auf. Auf lokal gespeicherte Daten bekomme ich aber ein Handle. Irgendwie muss ich mich wohl noch am Server anmelden, aber wie?

                          Memo1->Lines->LoadFromFile ( filename );
                          Löst eine Exception aus: Zugriff verweigert. Ich nehme mal an, aus den von Christian genannten Gründen.

                          Comment


                          • #14
                            Originally posted by bodo2407 View Post
                            Löst eine Exception aus: Zugriff verweigert.

                            Verweigert? Dann ist dass Pfad gefunden und existiert also.

                            Es ist eine Rechten sache.

                            Ich nehme mal an, aus den von Christian genannten Gründen.
                            Du sagtest das es bei einige rechner klapt und bei andere nicht. Stimmt dass?
                            Wenn dann stimt es mit das es ein Rechten sache is.

                            Welche OS'ses benutzt du?

                            Hast du mein TOpenDialog Beispiel ausprobiert?

                            Comment


                            • #15
                              Originally posted by bodo2407 View Post
                              Ergebnis: IHV poppt auf.
                              Wass ist IHV?


                              Edit:: lass es. Jezt sehe Ich es.

                              Comment

                              Working...
                              X