# Lire et écrire des fichiers sur l'appareil

L'interface de lecture/écriture de fichiers vous permet d'utiliser facilement cette fonctionnalité pour téléverser ou télécharger des fichiers depuis l'appareil. Elle prend en charge le téléchargement et le téléversement de fichiers volumineux. Vous pouvez utiliser les interfaces correspondantes pour télécharger des fichiers localement ou en mémoire, et pour téléverser des fichiers depuis la mémoire ou localement vers l'appareil. Elle inclut également des fonctionnalités telles que la suppression de fichiers, la modification des permissions de fichiers et l'obtention d'informations sur les fichiers.
Pour les fichiers qui n'existent pas ou pour lesquels vous n'avez pas les permissions nécessaires, l'appel provoquera des exceptions Python **natives** telles que `OSError` ou `FileNotFoundError`.

## Télécharger un fichier localement

Cette interface permet de télécharger un fichier de l'appareil vers le système local. Dans l'exemple ci-dessous, le contenu du fichier `/verity_key` de l'appareil est téléchargé dans le fichier `my_file.txt` sur l'ordinateur actuel. Notez que les informations de permission d'origine ne sont pas conservées pour le fichier téléchargé.

```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)
```

## Télécharger un fichier en mémoire

Cette interface permet de télécharger un fichier de l'appareil en mémoire (via BytesIO).

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

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


## Télécharger un fichier vers un descripteur

Cette interface permet de télécharger un fichier de l'appareil vers un descripteur de fichier. Notez que le fichier doit être ouvert en mode binaire `wb`.

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

## Téléverser un fichier sur l'appareil

Cette interface permet de téléverser un fichier local sur l'appareil. Dans l'exemple, cela signifie téléverser le fichier local `测试文件.txt` vers le fichier `/data/usr/file.txt` sur l'appareil. De même, les informations de permission d'origine ne sont pas conservées pour le fichier téléversé.

```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
```

## Téléverser un fichier depuis la mémoire

L'exemple suivant téléverse le contenu d'un fichier en mémoire vers le fichier `/data/usr/file.txt` sur l'appareil via BytesIO.

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

## Téléverser un fichier depuis un descripteur

L'exemple suivant téléverse le contenu du fichier local `myfile.txt` vers le fichier `/data/usr/file.txt` sur l'appareil via un descripteur de fichier fd. Notez que le fichier local doit être ouvert en mode binaire `rb`.

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

## Supprimer un fichier de l'appareil

Cette interface est utilisée pour supprimer des fichiers sur l'appareil.

```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
```

## Modifier les permissions d'un fichier

Cette interface est utilisée pour modifier les permissions d'un fichier sur l'appareil.

```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
```

## Obtenir les informations d'un fichier

Cette interface est utilisée pour obtenir des informations sur un fichier de l'appareil.

```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'
```