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 CodehFile = 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 PlayerHier ein Link zu diesem Player (zum Verständnis)
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