Datei lesen von Windows-Freigabe



  • Hallo.

    Ich versuche eine Datei von einer Windows-Freigabe zu lesen.

    Hier mein Code:

    #include <iostream>
    #include <fstream>
    #include <string>
    
    int main()
    {
        using namespace std;
        string s;
    
        ifstream myfile;
        myfile.open("\\\\192.168.100.100\\Freigabe\\test.txt");
    
        if (myfile.is_open())
        {
            cout << "Datei offen" << endl;
            while (!myfile.eof())
            {
                getline(myfile, s);
                cout << s << endl;
            }
        }
        else
            cout << "Datei kann nicht geoeffnet werden" << endl;
    
        myfile.close();
    }
    

    Ich bekomme zwar die Meldung "Datei offen" und wenn ich die Datei umbenenne auch "Datei kann nicht geoeffnet werden", aber es wird kein Inhalt ausgegeben.

    Probier ich es mit einer lokal gespeicherten Datei, indem ich den Pfad auf

    myfile.open("/home/andy/test.txt");
    

    ändere, dann erhalte ich den Inhalt.

    Kann mir einer da weiter helfen.
    Danke



  • Kannst du die Datei mit einem anderen Programm lesen?

    Prinzipiell sollte das funktionieren.
    Allerdings liest du immer eine Zeile zu viel.

    while (getline(myfile, s))
            {
                cout << s << endl;
            }
    

    wäre besser.



  • Mit was kann ich das testen?

    Könnte zwar das Verzeichnis mounten, aber sollte doch auch direkt über den Pfad funktionieren. 😕
    Wo doch anscheinend der Zugriff funktioniert, da er die Datei ja auch findet.



  • magic-andy schrieb:

    Mit was kann ich das testen?

    Notepad?



  • Programmieren tu ich unter Linux.
    Da gibt es kein Notepad 🙂
    Aber habs mit einem zweitem Windows probiert, da kann ich die Datei mit Notepad++ öffnen.

    Mein Konsolenprogramm soll die Datei von der Windows-Freigabe einlesen.
    Da ja erkannt wird, dass die Datei existiert, sollte doch auch das einlesen gehen ... oder?



  • magic-andy schrieb:

    Programmieren tu ich unter Linux.

    less



  • manni66 schrieb:

    magic-andy schrieb:

    Programmieren tu ich unter Linux.

    less

    Sehr hilfreich. Danke



  • Kein C++-Problem, übrigens. Falls das hier relevant ist.



  • Dieser Thread wurde von Moderator/in Arcoth aus dem Forum C++ (alle ISO-Standards) in das Forum Linux/Unix verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Funkioniert

    cat \\\\192.168.100.100\\Freigabe\\test.txt
    

    auf der Kommandozeile? Nein? Dann ist das das Problem.



  • magic-andy schrieb:

    manni66 schrieb:

    magic-andy schrieb:

    Programmieren tu ich unter Linux.

    less

    Sehr hilfreich. Danke

    Tja, wenn man zu blöd ist ...



  • manni66 schrieb:

    magic-andy schrieb:

    manni66 schrieb:

    magic-andy schrieb:

    Programmieren tu ich unter Linux.

    less

    Sehr hilfreich. Danke

    Tja, wenn man zu blöd ist ...

    Die Antwort war auch ein bisschen kurz :). Aber wenn man less nicht kennt, hat man noch nicht viel mit der Konsole und Linux gemacht.

    Wer ist denn der Besitzer der Files? Sind die auch lesbar?


  • Mod

    Bennisen schrieb:

    Wer ist denn der Besitzer der Files? Sind die auch lesbar?

    Wie sollte man das prüfen, wenn es unter Linux doch kein Notepad gibt?



  • Wie ich schon geschrieben hab, kann ich die Datei von einem anderem Windows PC mit Notepad öffnen. Die Freigabe ist für "Jeden" und "Lesen/Schreiben".

    Mit cat, nano, vi hab ich auf dem Linux-PC getestet, da gehts wohl auch nicht.

    Nach diversen weiteren Versuchen scheint auch die Erkennung, ob die Datei da ist bzw. nicht da ist, eher Zufall zu sein. Somit kann ich den Ansatz für das Problem wohl verwerfen und werd nach einer anderen Lösung suchen.

    Vielen Dank für eure Hilfe.

    P.S. an "manni66": Ein Wort hinwerfen und dann erwarten, das sich jeder sofort damit auskennt, ist keine Hilfe. Und beleidigen muss nicht sein 😡


  • Mod

    magic-andy schrieb:

    Mit cat, nano, vi hab ich auf dem Linux-PC getestet, da gehts wohl auch nicht.

    Und dein Programm soll es dann durch Zauberhand lesen können? Das ist offensichtlich eine Art von Berechtigungsproblem.



  • Da ja der Zugriff von einem anderen Windows-PC klappte und ich am Anfang davon ausging, das er die Datei "erkennt" (Datei offen, bzw nicht geoeffnet), dachte ich, es sollte klappen.

    UNC-Pfade klappen wohl nur unter Windows.

    Also nochmal Danke



  • magic-andy schrieb:

    Da ja der Zugriff von einem anderen Windows-PC klappte und ich am Anfang davon ausging, das er die Datei "erkennt" (Datei offen, bzw nicht geoeffnet), dachte ich, es sollte klappen.

    UNC-Pfade klappen wohl nur unter Windows.

    Also nochmal Danke

    Wie so soll das dann auf einem anderen Betriebssystem auf anhieb funktionieren? Ist ja schön und gut wenn das unter Windows klappt, aber du versuchst es ja unter Linux zu öffnen. Versuch also dein Glück unter Linux.



  • Kurze Frage am Rande: Muss man nicht irgendwie das Protokoll dazu angeben?
    Oder verbindet '\\ip\dir' sich default-mäßig, tcp-mäßig an eine IP des lokalen Netzwerks?



  • iz schrieb:

    Kurze Frage am Rande: Muss man nicht irgendwie das Protokoll dazu angeben?
    Oder verbindet '\\ip\dir' sich default-mäßig, tcp-mäßig an eine IP des lokalen Netzwerks?

    Unter Windows klappt das auch mit \\Servername\Freigabe\Datei.
    siehe auch https://de.wikipedia.org/wiki/Uniform_Naming_Convention

    Nach diesem Artikel müsste es auch unter Linux funktionieren, nur statt Backslash, wären es dann Slash. Jedoch macht es bei meinen Versuchen keinen Unterschied. Er findet die Datei nicht.



  • Linux sieht \\\\ip\\dir und versucht den Order .\\ip\dir zu finden. Es weiß nicht, dass das ein SMB share ist. Du musst zuerst mit mount -t cifs "\\ip\\share" -o "user=xxx,pass=yyy,uid=aaa,gid=bbb" /mnt/windowsshare" den Shareorder mounten, dann kannst du /mnt/windowsshare/readme.txt lesen und schreiben.

    Siehe https://wiki.samba.org/index.php/Mounting_samba_shares_from_a_unix_client


Anmelden zum Antworten