Zugriff auf Android Netzwerk Festplatte



  • Hallo,
    ich habe in meinem Heimnetzwerk den Zugriff auf HDDs anderer Windows-PCs, auf die FritzBox und auch auf den HiMedia Player, in dem ich eine 6TB HDD eingebaut habe und auf den ich per Netzwerk ebenfalls zugreifen kann.
    In einem Programm will ich das tun mit folgendem Code

      hFile = CreateFile(szFileTHN, 
                         GENERIC_READ, 
                         FILE_SHARE_READ,
                         NULL,
                         OPEN_EXISTING,
                         FILE_ATTRIBUTE_NORMAL, 
                         NULL);
    
      if (hFile == INVALID_HANDLE_VALUE)
          goto Abbruch; 
    

    Ich habe immer wieder die gleiche Datei gespeichert in
    G: = interne HDD
    F: = Fritzbox
    Y: = Netzlaufwerk auf einem anderen Windows-PC
    Q: = HDD in dem HiMedia Player

    Hier ein Link zu diesem Player (zum Verständnis)

    https://www.ebay.de/itm/325328075598?chn=ps&norover=1&mkevt=1&mkrid=7071533165376683&mkcid=2&itemid=325328075598&targetid=4582627049753645&device=c&mktype=&googleloc=&poi=&campaignid=376712746&mkgroupid=1264439088661572&rlsatarget=pla-4582627049753645&abcId=9300540&merchantid=87778&msclkid=a8eefe4006b31be604539d5b56b8fd50

    Ausser dem HiMedia funktioniert das, greife ich auf Q: zu wird hFile = INVALID_HANDLE_VALUE = -1 zurück gegeben, bei den anderen Zugriffen ist alles OK. Auf die betreffenden Dateien kann ich mit anderen Programmen problemlos zugreifen.
    HiMedia hat ein Android Betriebssystem und da weiss ich nicht, was dort alles abläuft.

    Evtl. muss ich bei CreateFile andere Parameter angeben.



  • @hkdd
    Was liefert GetLastError() zurück?



  • GetLastError liefert

    2 = ERROR_FILE_NOT_FOUND

    Die Datei ist aber garantiert vorhanden, benutze ich ein anderes Laufwerk, dann kommt dieser Fehler nicht.

    GetLogicalDrives() zeigt mir alle Laufwerke richtig an, auch Q:

    struct stat Status;
    stat(szFileTHN, &Status);
    

    Hier wird auch ein Fehler angezeigt und die Datei nicht erkannt.

      CHAR szDrive2[64]; 
      lstrcpy(szDrive2, "Q:\\1\\THN\\Test.thn");
      BOOL rc2 = PathFileExists(szDrive2);
    

    Wenn ich den Dateinamen der betreffenden Datei mit PathFileExists überprüfe, wird rc2 = 1 geliefert, d.h. diese Datei existiert.



  • Nun habe ich etwas ganz merkwürdiges festgestellt.
    Wenn ich die betreffende Datei umbenenne, z.B. in 0.thn statt Test.thn, dann kann ich sie problemlos verarbeiten.
    Auf einem anderen Laufwerk kann ich auch Test.thn lesen.
    Ist das eine Virenscanner-Problem ? Evtl. auf dem HiMedia-Andoid-Gerät ?
    Unter Windows läuft bei mir nur der windows-eigene Defender.



  • Könnte es ein Groß-/Kleinschreibung-Problem sein? Welches Filesystem ist denn darauf (z.B. ext4)?

    PS: Dieses Thema sollte nach "Betriebssysteme" (WinAPI) verschoben werden.



  • File System = NTFS
    Beim Dateinamen spielt unter Windows die Groß- und Kleinschreibung keine Rolle.
    Der Name ist aber korrekt so im Programm angegeben, wie der Name der Datei.
    Er wird vor dem Zugriff aus dem Directory gelesen, ich habe es aber auch mit einem Literal im Programm probiert.



  • Ich hab da so ein Déjà-vu?!
    Ich kann mich an eine Programmiersituation vor "Jahren" erinnern, wo durch eine Bibliothek das Wort "Test" aus Strings herausgefiltert wurde.🤔



  • @Helmut-Jakoby
    ich habe auch den Namen "Hartmut.thn" benutzt, derselbe Effekt. "00000000.thn" hat dagegen funktioniert.
    Man kann die HDD ganz einfach aus dem HiMedia ausbauen.
    An meinen PCs habe ich Wechselrahmen, mit deren Hilfe ich HDDs per sATA anschließen kann.
    Das habe ich jetzt getan - und auf diese Weise (ohne Android-Mitwirkung) kann ich problemlos auf alle Dateien zugreifen.
    Es hat sicherlich etwas mit Android zu tun und der von mir gewählten Zugriffsmethode für die THN-Dateien.
    Die zugehörigen Bilddateien (JPG, BMP usw.) lese ich ja auch ein, und dabei gibt es keine Probleme.
    Dort benutze ich aber eine völlig andere Zugriffsmethode.

    //  ##############################################
    //  ###                                        ###
    //  ###  JPG-Datei als BMP in BMP-Puffer       ###
    //  ###                                        ###
    //  ##############################################
    
    BYTE * LeseJPG(char * szFileName)
    {
    	CImage image;
    	IStream *stream = NULL;
    
    	HRESULT hr = image.Load(_T(szFileName)); // JPG-Datei einlesen
    	if (hr != S_OK) { return NULL; } // Fehler beim LOAD JPG  
    
    	hr = CreateStreamOnHGlobal(NULL, TRUE, &stream);
    	if (!SUCCEEDED(hr)) { return NULL; } // Fehler bei CreateStreamOnHGlobal
    
    	hr = image.Save(stream, Gdiplus::ImageFormatBMP);  // JPG-Image als BMP => Stream
    	if (hr != S_OK) { return NULL; } // Fehler beim SAVE BMP => Stream  
    
    	ULARGE_INTEGER liSize;
    	IStream_Size(stream, &liSize); // Länge der BMP im IStream
    	DWORD len = liSize.LowPart;
    	IStream_Reset(stream); // Für Lesen der BMP an Anfang setzen
    
    	hDIB = GlobalAlloc(GHND, len); // Speicher für BMP aus JPG anfordern
    	BYTE * lpPuBMP = (BYTE *)GlobalLock(hDIB);
    
    	IStream_Read(stream, &lpPuBMP[0], len); // BMP aus Stream in Puffer lesen
    	stream->Release();
    	stream = NULL;
    
    	for (int i = 0; i < (len - 14); i++) // ab Byte 0E... nach 00... 
    	{ lpPuBMP[i] = lpPuBMP[i + 14];	}
    
    	dwAnzFarbPIC = HoleAnzBmpFarben(lpPuBMP);
    	wBreitePIC   = HoleBmpBreite(lpPuBMP);
    	wHoehePIC    = HoleBmpHoehe(lpPuBMP);
    
    	return lpPuBMP;  // Pointer auf BMP-Puffer im Speicher
    
    } // Ende LeseJPG
    


  • Trotzdem teste noch mal eine Datei nur mit Kleinschreibung zu benutzen (Android wird sicherlich immer case-sensitive die Dateinamen behandeln) - denn schließlich funktioniert es ja bei reinen Zahlen (sowie der Endung).



  • @Th69 ,
    danke für den Hinweis, ich habe es auch mit z, zz, zzz usw. probiert. Das hat geklappt.
    Ich werde es mit test.thn nochmals versuchen.
    Gibt es eine geeignete Zugriffsmethode, ähnlich wie image.Load für Binärdateien, damit ich CreateFile gar nicht mehr benutzen muss ?🤓

    Hallo Th69,
    ich habe jetzt Hartmut in => hartmut geändert - damit klappt der Zugriff.

    Wenn ich mit dem HiMedia-Gerät selbst über den angeschlossenen TV die Bilder anschaue, da klappt es mit Groß- und Klein-Buchstaben. Aber offensichtlich nicht per Netzwerk Android => Windows.
    Aber auch nur, wenn ich mit CreateFile arbeite. Bei image.Load gibt es auch Groß-/Klein-Buchstaben - da funktioniert das problemlos.



  • Probiere mal FILE_FLAG_POSIX_SEMANTICS als zusätzliches Flag bei CreateFile: NTFS Case Sensitivity on Windows (entgegen der üblichen Annahme ist NTFS case-sensitive).
    Dann muß der Name aber auch exakt mit dem angelegten Namen übereinstimmen.

    PS: CImage.Load wird intern auch nur eine WinAPI-Funktion aufrufen (d.h. CreateFile). Dann müßte man wohl in den Source schauen, welche Parameter übergeben werden.



  • 	ifstream ThnFile(szFileTHN, ios::in | ios::binary | ios::ate);
    	if (ThnFile.is_open())
    	{
    		LenThnFile = ThnFile.tellg();
    		ThnByPu = new BYTE [LenThnFile];
    		ThnFile.seekg(0, ios::beg);
    		ThnFile.read((char *)ThnByPu, size);
    		ThnFile.close();
      usw
    
    

    Damit will ich es versuchen, ich hoffe das klappt, wie bei image.Load



  • Das hat leider auch nicht funktioniert.
    Ich habe deshalb ein kleinen Programm geschrieben, das die Dateinamen der THN-Dateien in Kleinbuchstaben umwandelt, falls Großbuchstaben im Dateinamen stehen. Es handelt sich um mehrere 100tausend Dateien.
    Für die Zukunft werden die Dateinamen für THN Dateien gleich nur noch mit Kleinbuchstaben erstellt.
    Bisher wurde der Name der zugehörigen Bilddatei genommen und die dortige Erweiterung durch .thn ersetzt.
    Aus den Kameras kommen ja die unterschiedlichsten Dateinamen, wie z.B. SAM_0015.JPG.
    Da muss die THN zukünftig sam_0015.thn statt SAM_0015.thn heißen.
    Wenn es das Android-Netzlaufwerk eben so will.



  • In dem zuge könnte man auch überlegen ob das script/programm nicht auch den image dateinamen in reine kleinbuchstaben umwandelt dann wäre es konsistent



  • V:\vv\#Fotos\Carl Larsson>dir
     Datenträger in Laufwerk V: ist vRyTos6TB
     Volumeseriennummer: 7C96-39CA
    
     Verzeichnis von V:\vv\#Fotos\Carl Larsson
    
    02.08.2022  09:52    <DIR>          .
    02.08.2022  09:52    <DIR>          ..
    01.11.2021  09:58           652.402 Am Klavier.jpg
    02.01.2020  13:45           618.961 Am Morgen des Weihnachtstages.jpg
    01.12.2016  09:06         1.540.048 Anna S 1911.jpg
    30.09.2019  13:24           798.144 Anna-Johanna liest ein Buch 1913.jpg
    31.05.2018  07:30           605.400 Apfelblüte (Lisbeth).jpg
    01.04.2021  09:45           392.433 Arbeitszimmer.jpg
    01.04.2015  13:33         2.117.947 Auf der Brache.jpg
    01.10.2017  09:57         1.548.694 Azalea.jpg
    01.02.2016  17:11         1.149.865 Barbro.jpg
    03.12.2015  09:07         1.164.948 Bett im Schrank.jpg
    31.03.2018  10:17           689.876 Birgit.jpg
    01.05.2021  12:58           410.633 Blumen am Haus.jpg
    31.05.2022  15:49         1.137.594 Blumenmädchen.jpg
    01.05.2018  10:08           507.707 Brautjungfer.jpg
    01.07.2018  15:12           651.365 Briefschreibend.jpg
    03.12.2014  17:10           666.067 Brita als Iduna.jpg
    01.07.2017  10:20         1.105.135 Brita in der Blumenwiese.jpg
    01.08.2019  08:03           504.389 Brita mit Rechen.jpg
    

    Hier mal ein Beispiel von Bilder-Namen.
    Mit Kleinbuchstaben sieht es so aus:

    Microsoft Windows [Version 10.0.19044.1949]
    (c) Microsoft Corporation. Alle Rechte vorbehalten.
    
    V:\vv\#Fotos\Carl Larsson\THN>dir
     Datenträger in Laufwerk V: ist vRyTos6TB
     Volumeseriennummer: 7C96-39CA
    
     Verzeichnis von V:\vv\#Fotos\Carl Larsson\THN
    
    12.09.2022  19:47    <DIR>          .
    12.09.2022  19:47    <DIR>          ..
    31.12.2021  10:57             5.886 am klavier.thn
    02.01.2020  18:06             7.522 am morgen des weihnachtstages.thn
    06.11.2019  17:47             7.621 anna s 1911.thn
    06.11.2019  17:47             7.547 anna-johanna liest ein buch 1913.thn
    06.11.2019  17:47             8.538 apfelblüte (lisbeth).thn
    08.04.2021  11:30             5.961 arbeitszimmer.thn
    06.11.2019  17:47             7.825 auf der brache.thn
    06.11.2019  17:47             7.964 azalea.thn
    06.11.2019  17:47             6.608 barbro.thn
    06.11.2019  17:47             7.578 bett im schrank.thn
    06.11.2019  17:47             7.136 birgit.thn
    01.05.2021  13:06             6.775 blumen am haus.thn
    31.05.2022  15:49             7.587 blumenmädchen.thn
    06.11.2019  17:47             6.347 brautjungfer.thn
    06.11.2019  17:47             8.389 briefschreibend.thn
    06.11.2019  17:47             4.327 brita als iduna.thn
    06.11.2019  17:47             7.336 brita in der blumenwiese.thn
    06.11.2019  17:47             8.533 brita mit rechen.thn
    06.11.2019  17:47             6.385 brita und ich 1895.thn
    06.11.2019  17:47             8.626 carl larsson mit kindern.thn
    01.06.2021  13:02             5.162 dame am ufer.thn
    

    Die Lesbarkeit und Verständlichkeit leidet seht darunter.
    Beim Programmcode nutzt man das ja auch.

    CreateStreamOnHGlobal sieht doch besser aus und ist verständlicher, als createstreamonhglobal


Anmelden zum Antworten