# Lesen und Schreiben von Gerätedateien

Die Schnittstelle zum Lesen und Schreiben von Dateien ermöglicht es Ihnen, diese Funktion einfach zu nutzen, um Dateien vom Gerät hoch- oder herunterzuladen. Sie unterstützt das Herunter- und Hochladen großer Dateien. Sie können die entsprechenden Schnittstellen verwenden, um Dateien lokal oder in den Speicher herunterzuladen und Dateien aus dem Speicher oder von einem lokalen Speicherort auf das Gerät hochzuladen. Sie umfasst auch Funktionen wie das Löschen von Dateien, das Ändern von Dateiberechtigungen und das Abrufen von Dateiinformationen.
Bei Dateien, die nicht existieren oder für die keine Berechtigung für den Vorgang besteht, löst der Aufruf eine **native** Python-Ausnahme wie `OSError` oder `FileNotFoundError` aus.

## Datei lokal herunterladen

Diese Schnittstelle kann Dateien vom Gerät lokal herunterladen. Im folgenden Beispiel wird der Inhalt der Datei `/verity_key` auf dem Gerät in die Datei `my_file.txt` auf dem aktuellen Computer heruntergeladen. Beachten Sie, dass die heruntergeladene Datei die ursprünglichen Berechtigungsinformationen nicht beibehält.

```python
d.download_file("/verity_key", "my_file.txt")
```

```python
>>> d.download_file("/adb_keys", "my_file.txt")
name: "adb_keys"
path: "/adb_keys"
st_mode: 33188
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
st_size: 2202
```

```python
>>> result = d.download_file("/adb_keys", "my_file.txt")
>>> print (result.st_mtime)
1230768000
>>> os.chmod("my_file.txt", result.st_mode)
```

## Datei in den Speicher herunterladen

Diese Schnittstelle kann Dateien vom Gerät in den Speicher herunterladen (mittels BytesIO).

```python
from io import BytesIO
fd = BytesIO()

d.download_fd("/verity_key", fd)
print (fd.getvalue())
```


## Datei in einen Deskriptor herunterladen

Diese Schnittstelle kann Dateien vom Gerät in einen Dateideskriptor herunterladen. Beachten Sie, dass die Datei im Binärmodus `wb` geöffnet werden muss.

```python
fd = open("my_file.txt", "wb")
d.download_fd("/verity_key", fd)
```

## Datei auf das Gerät hochladen

Diese Schnittstelle kann lokale Dateien auf das Gerät hochladen. Im Beispiel bedeutet dies, dass die lokale Datei `测试文件.txt` in die Datei `/data/usr/file.txt` auf dem Gerät hochgeladen wird. Auch beim Hochladen werden die ursprünglichen Berechtigungsinformationen nicht beibehalten.

```python
d.upload_file("测试文件.txt", "/data/usr/file.txt")
```

```python
>>> d.upload_file("file.txt", "/data/usr/file.txt")
name: "file.txt"
path: "/data/usr/file.txt"
st_mode: 33184
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
```

```python
>>> result = d.upload_file("file.txt", "/data/usr/file.txt")
>>> print (result.st_size)
0
```

## Datei aus dem Speicher hochladen

Das folgende Beispiel lädt den Inhalt einer Datei aus dem Speicher mittels BytesIO in die Datei `/data/usr/file.txt` auf dem Gerät hoch.

```python
from io import BytesIO
d.upload_fd(BytesIO(b"fileContent"), "/data/usr/file.txt")
```

## Datei von einem Deskriptor hochladen

Das folgende Beispiel lädt den Inhalt der lokalen Datei `myfile.txt` über den `fd`-Deskriptor in die Datei `/data/usr/file.txt` auf dem Gerät hoch. Beachten Sie, dass die lokale Datei im Binärmodus `rb` geöffnet werden muss.

```python
fd = open("myfile.txt", "rb")
d.upload_fd(fd, "/data/usr/file.txt")
```

## Gerätedatei löschen

Diese Schnittstelle wird verwendet, um Dateien auf dem Gerät zu löschen.

```python
d.delete_file("/data/usr/file.txt")
```

```python
>>> d.delete_file("/data/usr/file.txt")
True
```

```python
>>> d.delete_file("/adb_keys")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
OSError: [Errno 30] Read-only file system
```

## Dateiberechtigungen ändern

Diese Schnittstelle wird verwendet, um die Berechtigungen von Dateien auf dem Gerät zu ändern.

```python
d.file_chmod("/data/usr/file.txt", mode=0o777)
```

```python
>>> d.file_chmod("/data/usr/file.txt", mode=0o777)
name: "file.txt"
path: "/data/usr/file.txt"
st_mode: 33279
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
```

```python
>>> result = d.file_chmod("/data/usr/file.txt", mode=0o777)
>>> print (oct(result.st_mode))
0o100777
```

## Dateiinformationen abrufen

Diese Schnittstelle wird verwendet, um Informationen über Dateien auf dem Gerät abzurufen.

```python
d.file_stat("/data/usr/file.txt")
```

```python
>>> d.file_stat("/data/usr/file.txt")
name: "file.txt"
path: "/data/usr/file.txt"
st_mode: 33279
st_atime: 1230768000
st_mtime: 1230768000
st_ctime: 1230768000
```

```python
>>> result = d.file_stat("/data/usr/file.txt")
>>> print (result.name)
'file.txt'
```