# Leer y escribir archivos del dispositivo

La interfaz de lectura y escritura de archivos le permite utilizar fácilmente esta función para cargar o descargar archivos desde el dispositivo. Admite la descarga y carga de archivos grandes. Puede utilizar las interfaces correspondientes para descargar archivos a su sistema local o a la memoria, y para cargar archivos desde la memoria o su sistema local al dispositivo. También incluye funciones como eliminar archivos, modificar permisos de archivos y obtener información de archivos.
Para archivos que no existen o para los que no se tienen permisos de operación, la llamada provocará excepciones **nativas** de Python como `OSError` o `FileNotFoundError`.

## Descargar archivo a local

Esta interfaz puede descargar archivos del dispositivo a su sistema local. En el siguiente ejemplo, el contenido del archivo `/verity_key` del dispositivo se descargará al archivo `my_file.txt` en el ordenador actual. Tenga en cuenta que el archivo descargado no conservará la información de permisos original.

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

## Descargar archivo a la memoria

Esta interfaz puede descargar archivos del dispositivo a la memoria (a través de BytesIO).

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

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


## Descargar archivo a un descriptor

Esta interfaz puede descargar archivos del dispositivo a un descriptor de archivo. Tenga en cuenta que el archivo debe abrirse en modo binario `wb`.

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

## Cargar archivo al dispositivo

Esta interfaz puede cargar archivos locales al dispositivo. En el ejemplo, significa cargar el archivo local `测试文件.txt` al archivo `/data/usr/file.txt` en el dispositivo. La carga de archivos tampoco conservará la información de permisos original.

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

## Cargar archivo desde la memoria

El siguiente ejemplo carga el contenido de un archivo en memoria al archivo `/data/usr/file.txt` en el dispositivo a través de BytesIO.

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

## Cargar archivo desde un descriptor

El siguiente ejemplo carga el contenido del archivo local `myfile.txt` al archivo `/data/usr/file.txt` en el dispositivo a través de un descriptor `fd`. Tenga en cuenta que el archivo local debe abrirse en modo binario `rb`.

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

## Eliminar archivo del dispositivo

Esta interfaz se utiliza para eliminar archivos en el dispositivo.

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

## Modificar permisos de archivo

Esta interfaz se utiliza para modificar los permisos de archivos en el dispositivo.

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

## Obtener información del archivo

Esta interfaz se utiliza para obtener información sobre los archivos en el dispositivo.

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