# Datei erzeugen, per E-Mail senden



## Gast2 (4. Okt 2012)

Hallo,

ich will in meiner App Daten sammeln, diese zu einer Datei formen und diese Datei per E-Mail versenden.
Ich habe mit verschiedenen Varianten bisher nur erfolglos experimentiert.

Die Erfolgslosigkeit zeigt sich vor allem darin, dass ich die vermeintlich erzeugten Ordner und Files auf meinem Smartphone (SD-Karte) nicht finden kann.

Hier mal das Erzeugen von Ordnern:

```
private void unterverzeichnisHinzufuegen() {
//		Wurzelverzeichnis des externen Mediums
		File dir1 = Environment.getExternalStorageDirectory();
		info("getExternalStorageDirectory(): " + dir1.getAbsolutePath(), true);
//		App speziefischen Pfad hinzufügen
		File dirAppBase = new File(dir1.getAbsolutePath() + File.separator + 
				"Android" + File.separator +
				"data" + File.separator +
				getClass().getPackage().getName() + File.separator +
				"files");
//		ggf. Verzeichnis anlegen
		dirAppBase.mkdirs();
	}
```

Ich suche sowohl im ES Datei Explorer auf dem Smartphone als auch über die USB-Schnittstelle auf meinem PC vergebens nach den Ordnern (.../Android/data/.../files).

Beim Ausführen gibt es aber auch keine Fehlermeldung.
Dass die SD-Card beschreibbar ist, habe ich zuvor geprüft
(Environment.MEDIA_MOUNTED.equals(state)).

Im Windows Explorer ist die Einstellung auf "versteckte Dateien anzeigen" gesetzt.

*Warum werden die Ordner nicht erzeugt?*

*? ? ?*


----------



## schlingel (4. Okt 2012)

Wie würde der Pfad aussehen den du da verwendest? Wahrscheinlich gibt mkdirs false zurück. 

Prinzipiell sehe ich aber kein Problem. Ich verwende ganz ähnlichen Code:

```
public static final String PERSISTANT_STORAGE_DIR = "/Android/data/my.packagefiles/";

	public PersistantStorage() {
		String state = Environment.getExternalStorageState();
		persistantCacheDir = null;

		if (Environment.MEDIA_MOUNTED.equals(state)) {
			isStorageAvailable = true;
		} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
		    isStorageAvailable = false;
		    Log.w(PersistantStorage.class.getName(), "Storage is readonly - persistant storage isn't usable!");
		} else {
		    isStorageAvailable = false;
		    Log.w(PersistantStorage.class.getName(), "Storage isn't available - state: " + state);
		}
		
		if(isStorageAvailable) {
			try {
				persistantCacheDir = new File(Environment.getExternalStorageDirectory(), PERSISTANT_STORAGE_DIR);
				if(!persistantCacheDir.exists()) {
					if(persistantCacheDir.mkdirs()) {
						Log.i(PersistantStorage.class.getName(), String.format("created persistant cache directory %s successfully!", persistantCacheDir.getCanonicalPath()));
					} else {
						Log.w(PersistantStorage.class.getName(), "Couldn't create persistant cache directory!");
					}
				}
				
			} catch(IOException e) {
				isStorageAvailable = false;
				Log.e(PersistantStorage.class.getName(), "Couldn't initialize persistant cache directory", e);
			}
		} 
	}
```


----------



## Gast2 (8. Okt 2012)

schlingel hat gesagt.:


> Wie würde der Pfad aussehen den du da verwendest?


ich denke: Android/data/my.packagename/files



schlingel hat gesagt.:


> Wahrscheinlich gibt mkdirs false zurück.


Da hast Du sehr recht!
Danke für den Hinweis!
Wie bist Du darauf gekommen?
Das ist ja dann durchaus auch das Problem.


----------



## Gast2 (8. Okt 2012)

schlingel hat gesagt.:


> persistantCacheDir = null;




Soll persistantCacheDir vom Typ Object sein oder was ist das?


----------



## schlingel (8. Okt 2012)

> Wie bist Du darauf gekommen?


In der Doku steht, es liefert False wenn etwas nicht passt. Was genau bei dir passt weis ich nicht. Blöderweise bekommst du keine Exception zurück. Da hilft nur tüfteln und ausprobieren um herauszufinden woran es liegt.

Übrigens, persistantCacheDir ist vom Typ File. Die Klasse PersistantStorage hat das als Feld.


----------



## Gast2 (22. Okt 2012)

in das Manifest gehört
[XML]<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />[/XML]

daran hat's gehangen.
Jetzt alles super.


----------

