PNG nach SDCARD speichern: EISDIR Fehler

isam2k

isam2k

Fortgeschrittenes Mitglied
44
Hi alle,

ich komm mal wieder nicht weiter. Ich versuche eine Bitmap als PNG auf die sdcard zu schieben:

Code:
if (storageState.equals(Environment.MEDIA_MOUNTED)) {
            //Set filename accordingly
            fileName += ".PNG";
            
            //Get pictures folder
            String exDir = Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_PICTURES).toString();
            
            //Create a file to the project directory
            File path = new File(exDir + "/" + projectName);
            
            //Make the project directory if necessary
            path.mkdirs();
            
            File file = new File(path, fileName);
            
            try {
                FileOutputStream out = new FileOutputStream(file);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
                out.flush();
                out.close();
            }
            catch (Exception e) {
                msg = Toast.makeText(
                        context,
                        "Error: Unable to write bitmap data. " + e.getMessage(),
                        Toast.LENGTH_LONG);
                msg.show();
                return false;
            }
        }
Sagen wir mal, ich rufe den obigen Text mit folgenden Parametern auf:

Code:
projectName = "Sprites";
fileName = "Default";
Dann krieg ich jedes mal die selbe Exception:

Open failed: EISDIR (is a directory)
Das ganze ist nach folgendem Muster aufgebaut, welches anscheinend funktioniert:

Android-er: Save file to SD Card

Ich hab irgendwie das Gefühl, dass das ganze durch

Code:
path.mkdirs();
verursacht wird, denn auch die Directory kann ich nach dem Ausführen nicht auf der SDCARD ausmachen. (Obwohl der Rückgabewert true ist :scared:)

Allerdings schlägt auch folgendes fehl:

String extStorageDirectory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
File file = new File(extStorageDirectory, "er.PNG");

Berechtigungen sind gesetzt, Testgerät ist ein SGN mit Android 4.0.4.

Code:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ch.subgate.spritestudio"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="10" />
    
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
[...]
Hilfe bitte... Ich hab keine Ahnung was ich falsch mache. Danke im Voraus.
 
Zuletzt bearbeitet:
Nur so ein Schuss ins Blaue:

Ersetze mal
Code:
//Create a file to the project directory
            File path = new File(exDir + "/" + projectName);
            
            //Make the project directory if necessary
            path.mkdirs();
            
            File file = new File(path, fileName);
mit
Code:
            File file = new File(exDir + "/" + projectName, fileName);
            file.mkdirs();



EDIT: Oder häng hier noch ein / dran -> File path = new File(exDir + "/" + projectName + "/");
 
Hatte ich mit grosser Sicherheit bereits versucht, habs aber noch mal getestet und die Exception bleibt dieselbe. (Rebuild forciert, zur Sicherheit).

Edit: Um das noch anzugeben

Code:
file.getPath(); // = "/mnt/sdcard/Pictures/Sprites/Default.PNG"


Der ursprüngliche Beitrag von 13:49 Uhr wurde um 14:09 Uhr ergänzt:

Ooook jetzt wirds creepy:

Ich hab eben folgendes hinzugefügt:

Code:
if (file.isDirectory()) {
      Log.d("SpriteStudio", "Yep, that sucks!");
}
Und nun krieg ich KEINE Exception mehr (allerdings wird nach wie vor nix gespeichert und auch die Directory wird nicht erstellt). Also hab ich auch nochmals den Rückgabewert von mkdirs gecheckt, welcher nun (oh wunder): false ist.

Ich bin leicht verwirrt...

Der ursprüngliche Beitrag von 14:09 Uhr wurde um 15:20 Uhr ergänzt:

Ok, ich weiss nicht, weshalb mein PC mir das antut, aber:

Ich hab jetzt mal

Code:
Environment.getExternalStoragePublic...
durch

Code:
Environment.getExternalStorageDirectory();
Ersetzt, was bewirkte, dass file.isDirectory() nicht länger true ergab (ausserdem machten nun auch die Rückgabewerte von mkdirs plötzlich Sinn (true beim ersten Mal und false danach, anstatt abwechselnd true und false). Allerdings konnte ich nach wie vor den betreffenden Ordner nicht auf der sdcard ausmachen.

Hab nun, um auch noch die letzte Eventualität zu prüfen den ESFileExplorer geladen, um zu schauen, ob die Dateien unter Umständen einfach auf dem PC nicht sichtbar sind.

Tadaaaa! Da waren sie, alles ok!

Wie kommt es, dass die Dateien und Dirs aber am PC nicht sichtbar sind (mtp)?
 
Zuletzt bearbeitet:

Ähnliche Themen

B
Antworten
6
Aufrufe
1.051
jogimuc
J
softwaretk
Antworten
3
Aufrufe
1.203
swa00
swa00
A
Antworten
10
Aufrufe
1.925
swa00
swa00
Zurück
Oben Unten