English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Guía básica de NodeJS

Express.js de NodeJS

Buffer & URL de NodeJS

MySql de NodeJS

MongoDB de NodeJS

Archivos (FS) de NodeJS

Otras características de NodeJS

Sistema de archivos (FS) en Node.js

Node.js FS

Node FS es un módulo integrado de Node.js que le ayuda a manejar y operar archivos.

Operaciones de archivo NodeJs FS

Con Node FS, puede realizar las siguientes operaciones en el archivo:

  • lectura de archivo

  • Crear o sobrescribir archivo

  • Actualizar archivo

  • 删除文件

  • Renombrar archivo

Node.js proporciona un conjunto de API de operaciones de archivos similares a UNIX (POSIX). La sintaxis de importación de módulo de sistema de archivos (fs) de Node se muestra a continuación:

var fs = require("fs")

Asíncrono y síncrono

El módulo de sistema de archivos de Node.js (módulo fs) tiene métodos tanto asíncronos como síncronos, por ejemplo, las funciones de lectura de contenido de archivo tienen fs.readFile() asíncrono y fs.readFileSync() síncrono.

El último parámetro de la función de método asíncrono es la función de devolución de llamada, el primer parámetro de la función de devolución de llamada contiene la información de error (error).

Se recomienda usar métodos asíncronos, ya que son más rápidos y eficientes que los síncronos, y no bloquean.

Ejemplo

Crear el archivo input.txt, el contenido es el siguiente:

Dirección del sitio web del tutorial básico: es.oldtoolbag.com
Ejemplo de lectura de archivo

Crear el archivo file.js, el código es el siguiente:

var fs = require("fs");
// Lectura asíncrona
fs.readFile('input.txt', function(err, data) {
   if (err) {
       return console.error(err);
   }
   console.log("Lectura asíncrona: "); + data.toString());
});
// Lectura síncrona
var data = fs.readFileSync('input.txt');
console.log("Lectura síncrona: "); + data.toString());
console.log("La ejecución del programa se ha completado.");

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
Lectura síncrona: Dirección de la página web de la guía básica: es.oldtoolbag.com
Ejemplo de lectura de archivo
La ejecución del programa se ha completado.
Lectura asíncrona: Dirección de la página web de la guía básica: es.oldtoolbag.com
Ejemplo de lectura de archivo

Ahora, vamos a entender específicamente los métodos del sistema de archivos de Node.js.

Abrir archivo

Sintaxis

A continuación, se muestra el formato de sintaxis para abrir archivos en modo asíncrono:

fs.open(path, flags[, mode], callback)

Parámetros

Descripción de los parámetros:

  • path - La ruta del archivo.

  • flags - Comportamiento al abrir el archivo. Los valores específicos se detallan a continuación.

  • mode - Establecer el modo de archivo (permisos), el permiso predeterminado de creación de archivo es 0666(readable, writable).

  • callback - Callback function, with two parameters such as: callback(err, fd).

The flags parameter can be the following values:

FlagDescription
rOpen the file in read mode. If the file does not exist, an exception is thrown.
r+Open the file in read/write mode. If the file does not exist, an exception is thrown.
rsRead files synchronously.
rs+Read and write files synchronously.
wOpen the file in write mode, if the file does not exist, it will be created.
wxSimilar to 'w', but if the file path exists, the file write fails.
w+Open the file in read/write mode, if the file does not exist, it will be created.
wx+Similar to 'w+However, if the file path exists, the file read/write fails.
aOpen the file in append mode, if the file does not exist, it will be created.
axSimilar to 'a', but if the file path exists, the file append fails.
a+Open the file in read append mode, if the file does not exist, it will be created.
ax+Similar to 'a+However, if the file path exists, the file read append fails.

Ejemplo

Next, we create the file.js file and open the input.txt file for reading and writing, as shown in the code below:

var fs = require("fs");
// Asynchronous file opening
console.log("¡Preparando para abrir el archivo!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
  console.log("¡El archivo se ha abierto con éxito!");     
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
准备打开文件!
文件打开成功!

Get file information

Sintaxis

The following is the syntax format for obtaining file information asynchronously:

fs.stat(path, callback)

Parámetros

Descripción de los parámetros:

  • path - Ruta del archivo.

  • callback - Callback function, with two parameters such as: (err, stats), stats is a fs.Stats object.

After fs.stat(path) is executed, an instance of the stats class will be returned to its callback function. You can use the methods provided by the stats class to determine the relevant properties of the file. For example, to determine whether it is a file:

var fs = require('fs');
fs.stat('/Users/liuht/code/itbilu/demo/fs.js', function (err, stats) {
    console.log(stats.isFile());         //true
)

The methods in the stats class include:

MethodDescription
stats.isFile()If it is a file, it returns true; otherwise, it returns false.
stats.isDirectory()If it is a directory, it returns true; otherwise, it returns false.
stats.isBlockDevice()If it is a block device, it returns true; otherwise, it returns false.
stats.isCharacterDevice()If it is a character device, it returns true; otherwise, it returns false.
stats.isSymbolicLink()Si es un enlace simbólico devuelve true, de lo contrario devuelve false.
stats.isFIFO()Si es FIFO, devuelve true, de lo contrario devuelve false. FIFO es un tipo especial de tubería de comandos en UNIX.
stats.isSocket()Si es Socket devuelve true, de lo contrario devuelve false.

Ejemplo

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
console.log("¡Preparando para abrir el archivo!");
fs.stat('input.txt', function(err, stats) {
   if (err) {
       return console.error(err);
   }
   console.log(stats);
   console.log("¡Éxito en la lectura de información de archivo!");
   
   // Detectar tipo de archivo
   console.log("¿Es un archivo (isFile)? "); + stats.isFile());
   console.log("¿Es un directorio (isDirectory)? "); + stats.isDirectory());    
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
准备打开文件!
{ dev: 16777220 ,
  modo: 33188,
  nlink: 1,
  uid: 501,
  gid: 20 ,
  rdev: 0 ,
  blksize: 4096,
  ino: 40333161,
  tamaño: 61,
  bloques: 8,
  atime: Mon Sep 07 2015 17:43:55 GMT+0800 (CST),
  mtime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST),
  ctime: Mon Sep 07 2015 17:22:35 GMT+0800 (CST)}
¡Éxito en la lectura de información de archivo!
¿Es un archivo (isFile)? true
¿Es un directorio (isDirectory)? false

Escribir archivo

Sintaxis

A continuación se muestra el formato de sintaxis para escribir archivos en modo asincrónico:

escribeArchivo(archivo, datos[, opciones], callback)

Escribir archivo abre directamente el archivo por defecto es w modo, por lo que si el archivo existe, el contenido escrito por este método sobrescribirá el contenido antiguo del archivo.

Parámetros

Descripción de los parámetros:

  • archivo - Nombre del archivo o descriptor de archivo.

  • datos - Los datos a escribir en el archivo, que pueden ser String (cadena) o objeto Buffer (búfer).

  • opciones - Este parámetro es un objeto que contiene {encoding, mode, flag}. El código de codificación predeterminado es utf8, modo 0666 ,flag como 'w'

  • callback - La función de retroalimentación, la función de retroalimentación solo contiene el parámetro de información de error (err), y devuelve en caso de falla de escritura.

Ejemplo

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
console.log("Preparando escritura de archivo");
escribeArchivo('input.txt', 'Soy el contenido de archivo escrito mediante escribeArchivo', function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("¡Escribir datos exitosamente!");
   console.log("--------Soy una línea de separación-------------")
   console.log("¡Leyendo los datos escritos!");
   fs.readFile('input.txt', function(err, data) {
      if (err) {
         return console.error(err);
      }
      console.log("¡Lectura asíncrona de datos del archivo: ", + data.toString());
   });
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
¡Preparando para escribir el archivo
¡Escribir datos exitosamente!
--------Soy una línea de separación-------------
¡Leyendo los datos escritos!
Lectura asíncrona de datos del archivo: estoy escribiendo el contenido del archivo a través de fs.writeFile

lectura de archivo

Sintaxis

A continuación se muestra el formato de sintaxis para leer archivos en modo asíncrono:

fs.read(fd, buffer, offset, length, position, callback)

Este método utiliza un descriptor de archivo para leer el archivo.

Parámetros

Descripción de los parámetros:

  • fd - descripción del archivo proporcionada por fs.open().

  • buffer - búfer de escritura de datos.

  • offset - desplazamiento de escritura en el búfer.

  • length - número de bytes que se leerán del archivo.

  • position - posición de inicio de lectura del archivo, si el valor de position es null, se leerá desde la posición del puntero del archivo actual.

  • callback - callback, tres parámetros err, bytesRead, buffer, err es el mensaje de error, bytesRead indica el número de bytes leídos, buffer es el objeto de búfer.

Ejemplo

input.txt 文件内容为:

Dirección del sitio web del tutorial básico: es.oldtoolbag.com

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
var buf = new Buffer.alloc(1024);
console.log("¡Preparando para abrir el archivo existente!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("¡El archivo se ha abierto con éxito!");
   console.log("¡Preparando para leer el archivo:");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
      if (err) {
         console.log(err);
      }
      console.log(bytes + "	bytes leídos");
      
      // 仅输出读取的字节
      if (bytes > 0) {
         console.log(buf.slice(0, bytes).toString());
      }
   });
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
¡Preparando para abrir el archivo existente!
文件打开成功!
¡Preparando para leer el archivo:
42  bytes leídos
Dirección del sitio web del tutorial básico: es.oldtoolbag.com

关闭文件

Sintaxis

A continuación se muestra el formato de sintaxis para cerrar archivos en modo asíncrono:

fs.close(fd, callback)

Este método utiliza un descriptor de archivo para leer el archivo.

Parámetros

Descripción de los parámetros:

  • fd - descripción del archivo proporcionada por fs.open().

  • callback - Función de callback, sin parámetros.

Ejemplo

input.txt 文件内容为:

Dirección del sitio web del tutorial básico: es.oldtoolbag.com

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
var buf = new Buffer.alloc(1024);
console.log("¡Preparando para abrir el archivo!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("¡El archivo se ha abierto con éxito!");
   console.log("¡Preparando para leer el archivo!");
   fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
      if (err) {
         console.log(err);
      }
      // 仅输出读取的字节
      if (bytes > 0) {
         console.log(buf.slice(0, bytes).toString());
      }
      // 关闭文件
      fs.close(fd, function(err) {
         if (err) {
            console.log(err);
         } 
         console.log("¡El archivo se ha cerrado con éxito!");
      });
   });
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
准备打开文件!
文件打开成功!
¡Preparando para leer el archivo!
Dirección del sitio web del tutorial básico: es.oldtoolbag.com
文件关闭成功

截取文件

Sintaxis

A continuación se muestra el formato de sintaxis para capturar archivos en modo asíncrono:

fs.ftruncate(fd, len, callback)

Este método utiliza un descriptor de archivo para leer el archivo.

Parámetros

Descripción de los parámetros:

  • fd - descripción del archivo proporcionada por fs.open().

  • len - longitud del contenido del archivo que se captura.

  • callback - Función de callback, sin parámetros.

Ejemplo

input.txt 文件内容为:

site:es.oldtoolbag.com

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
var buf = new Buffer.alloc(1024);
console.log("¡Preparando para abrir el archivo!");
fs.open('input.txt', 'r+', function(err, fd) {
   if (err) {
       return console.error(err);
   }
   console.log("¡El archivo se ha abierto con éxito!");
   10字节内的文件内容,超出部分将被去除。
   
   // 截取文件
   fs.ftruncate(fd, 10, function(err) {
      if (err) {
         console.log(err);
      } 
      console.log("文件截取成功。");
      console.log("读取相同的文件"); 
      fs.read(fd, buf, 0, buf.length, 0, function(err, bytes) {
         if (err) {
            console.log(err);
         }
         // 仅输出读取的字节
         if (bytes > 0) {
            console.log(buf.slice(0, bytes).toString());
         }
         // 关闭文件
         fs.close(fd, function(err) {
            if (err) {
               console.log(err);
            } 
            console.log("文件关闭成功!");
         });
      });
   });
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
准备打开文件!
文件打开成功!
截取10字节内的文件内容,超出部分将被去除。
文件截取成功。
读取相同的文件
site:www.r
文件关闭成功

删除文件

Sintaxis

以下为删除文件的语法格式:

fs.unlink(path, callback)

Parámetros

Descripción de los parámetros:

  • path - Ruta del archivo.

  • callback - Función de callback, sin parámetros.

Ejemplo

input.txt 文件内容为:

site:es.oldtoolbag.com

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
console.log("准备删除文件!");
fs.unlink('input.txt', function(err) {
   if (err) {
       return console.error(err);
   }
   console.log("文件删除成功!");
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
准备删除文件!
文件删除成功!

再去查看 input.txt 文件,发现已经不存在了。

创建目录

Sintaxis

以下为创建目录的语法格式:

fs.mkdir(path[, options], callback)

Parámetros

Descripción de los parámetros:

  • path - Ruta del archivo.

  • options 参数可以是:

    • recursive - 是否以递归的方式创建目录,默认为 false。

    • mode - 设置目录权限,默认为 0777.

  • callback - Función de callback, sin parámetros.

Ejemplo

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
// tmp 目录必须存在
console.log("创建目录 /tmp/test/");
fs.mkdir("/tmp/test/
   if (err) {
       return console.error(err);
   }
   console.log("目录创建成功。");
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
创建目录 /tmp/test/
目录创建成功。

可以添加  recursive: true 参数,不管创建的目录  /tmp 和 /tmp/a 是否存在:

fs.mkdir('/tmp/a/apple', { recursive: true }, (err) => {
  if (err) throw err;
});

Lectura de directorio

Sintaxis

A continuación, se muestra el formato de sintaxis para leer el directorio:

fs.readdir(path, callback)

Parámetros

Descripción de los parámetros:

  • path - Ruta del archivo.

  • callback - Función de callback, la función de callback tiene dos parámetros err, files, err es la información de error, files es la lista de arrays de archivos del directorio.

Ejemplo

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
console.log("Ver /Directorio tmp
fs.readdir("/tmp/",function(err, files){
   if (err) {
       return console.error(err);
   }
   files.forEach(function(file){
       console.log(file);
   });
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
Ver /Directorio tmp
input.out
output.out
test
test.txt

Eliminar directorio

Sintaxis

A continuación, se muestra el formato de sintaxis para eliminar el directorio:

fs.rmdir(path, callback)

Parámetros

Descripción de los parámetros:

  • path - Ruta del archivo.

  • callback - Función de callback, sin parámetros.

Ejemplo

A continuación, creamos el archivo file.js con el código siguiente:

var fs = require("fs");
// Antes de ejecutar, crear un directorio vacío /tmp/Directorio test
console.log("Preparando para eliminar el directorio /tmp/test");
fs.rmdir("/tmp/test",function(err){
   if (err) {
       return console.error(err);
   }
   console.log("Lectura /Directorio tmp
   fs.readdir("/tmp/",function(err, files){
      if (err) {
          return console.error(err);
      }
      files.forEach(function(file){
          console.log(file);
      });
   });
});

El resultado de la ejecución del código anterior es el siguiente:

$ node file.js 
Preparando para eliminar el directorio /tmp/test
Lectura /Directorio tmp
……

Manual de referencia de métodos del módulo de archivos

A continuación, se muestra la lista de métodos del módulo de archivos de Node.js:

Número de secuenciaMétodo & Descripción
1fs.rename(oldPath, newPath, callback)
La función de callback de rename(). No tiene parámetros, pero puede lanzar excepciones.
2fs.ftruncate(fd, len, callback)
La función de callback de ftruncate(). No tiene parámetros, pero puede lanzar excepciones.
3fs.ftruncateSync(fd, len)
ftruncate() sincronizado
4fs.truncate(path, len, callback)
La función de callback de truncate(). No tiene parámetros, pero puede lanzar excepciones.
5fs.truncateSync(path, len)
Sincronizar truncate().
6fs.chown(path, uid, gid, callback)
Asincrónico chown(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
7fs.chownSync(path, uid, gid)
Sincronizar chown().
8fs.fchown(fd, uid, gid, callback)
Asincrónico fchown(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
9fs.fchownSync(fd, uid, gid)
Sincronizar fchown().
10fs.lchown(path, uid, gid, callback)
Asincrónico lchown(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
11fs.lchownSync(path, uid, gid)
Sincronizar lchown().
12fs.chmod(path, mode, callback)
Asincrónico chmod(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
13fs.chmodSync(path, mode)
Sincronizar chmod().
14fs.fchmod(fd, mode, callback)
Asincrónico fchmod(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
15fs.fchmodSync(fd, mode)
Sincronizar fchmod().
16fs.lchmod(path, mode, callback)
Asincrónico lchmod(). La función de callback no tiene parámetros, pero puede lanzar excepciones. Solo disponible en Mac OS X.
17fs.lchmodSync(path, mode)
Sincronizar lchmod().
18fs.stat(path, callback)
Asincrónico stat(). La función de callback tiene dos parámetros: err, stats, donde stats es un objeto fs.Stats.
19fs.lstat(path, callback)
Asincrónico lstat(). La función de callback tiene dos parámetros: err, stats, donde stats es un objeto fs.Stats.
20fs.fstat(fd, callback)
Asincrónico fstat(). La función de callback tiene dos parámetros: err, stats, donde stats es un objeto fs.Stats.
21fs.statSync(path)
Sincronizar stat(). Devuelve una instancia de fs.Stats.
22fs.lstatSync(path)
sincronizado lstat(). Devuelve una instancia de fs.Stats.
23fs.fstatSync(fd)
sincronizado fstat(). Devuelve una instancia de fs.Stats.
24fs.link(srcpath, dstpath, callback)
asincrónico link(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
25fs.linkSync(srcpath, dstpath)
sincronizado link().
26fs.symlink(srcpath, dstpath[, type], callback)
asincrónico symlink(). La función de callback no tiene parámetros, pero puede lanzar excepciones. El parámetro type puede establecerse en 'dir', 'file', o 'junction' (por defecto 'file').
27fs.symlinkSync(srcpath, dstpath[, type])
sincronizado symlink().
28fs.readlink(path, callback)
asincrónico readlink(). La función de callback tiene dos parámetros err, linkString.
29fs.realpath(path[, cache], callback)
asincrónico realpath(). La función de callback tiene dos parámetros err, resolvedPath.
30fs.realpathSync(path[, cache])
sincronizado realpath(). Devuelve la ruta absoluta.
31fs.unlink(path, callback)
asincrónico unlink(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
32fs.unlinkSync(path)
sincronizado unlink().
33fs.rmdir(path, callback)
asincrónico rmdir(). La función de callback no tiene parámetros, pero puede lanzar excepciones.
34fs.rmdirSync(path)
sincronizado rmdir().
35fs.mkdir(path[, mode], callback)
asincrónico mkdir(2). La función de callback no tiene parámetros, pero puede lanzar excepciones. El permiso de acceso predeterminado es 0777.
36fs.mkdirSync(path[, mode])
sincronizado mkdir().
37fs.readdir(path, callback)
asincrónico readdir(3). Lee el contenido del directorio.
38fs.readdirSync(path)
sincronizado readdir(). Devuelve una lista de arrays de archivos.
39fs.close(fd, callback)
close() asíncrono. La función de callback no tiene parámetros, pero puede lanzar excepciones.
40fs.closeSync(fd)
close() sincrono.
41fs.open(path, flags[, modo], callback)
Abrir archivo asíncronamente.
42fs.openSync(path, flags[, modo])
Versión sincrona de fs.open().
43fs.utimes(path, atime, mtime, callback)
 
44fs.utimesSync(path, atime, mtime)
Modificar la marca de tiempo del archivo, el archivo se especifica mediante la ruta de archivo.
45fs.futimes(fd, atime, mtime, callback)
 
46fs.futimesSync(fd, atime, mtime)
Modificar la marca de tiempo del archivo, especificada a través del descriptor de archivo.
47fs.fsync(fd, callback)
fsync asíncrono. La función de callback no tiene parámetros, pero puede lanzar excepciones.
48fs.fsyncSync(fd)
fsync sincrono.
49fs.write(fd, buffer, offset, length[, posición], callback)
Escribir contenido del búfer en el archivo especificado mediante el descriptor de archivo.
50fs.write(fd, data[, posición[, codificación]], callback)
Escribir contenido de archivo a través del descriptor de archivo fd.
51fs.writeSync(fd, buffer, offset, length[, posición])
Versión sincrona de fs.write().
52fs.writeSync(fd, data[, posición[, codificación]])
Versión sincrona de fs.write().
53fs.read(fd, buffer, offset, length, position, callback)
Lectura de contenido de archivo a través del descriptor de archivo fd.
54fs.readSync(fd, buffer, offset, length, position)
Versión sincrona de fs.read.
55fs.readFile(filename[, opciones], callback)
Lectura asíncrona de contenido de archivo.
56fs.readFileSync(filename[, opciones])
Lectura de archivos en modo sincrono de fs.readFile.
57fs.writeFile(filename, data[, options], callback)
Escribe contenido de archivo de manera asincrónica.
58fs.writeFileSync(filename, data[, options])
Versión síncrona de fs.writeFile.
59fs.appendFile(filename, data[, options], callback)
Añade contenido de archivo de manera asincrónica.
60fs.appendFileSync(filename, data[, options])
Versión síncrona de fs.appendFile.
61fs.watchFile(filename[, options], listener)
Mira la modificación del archivo.
62fs.unwatchFile(filename[, listener])
Detén la revisión de la modificación del nombre de archivo.
63fs.watch(filename[, options][, listener])
Mira la modificación del nombre de archivo, el nombre de archivo puede ser un archivo o un directorio. Devuelve el objeto fs.FSWatcher.
64fs.exists(path, callback)
Verifica si la ruta dada existe.
65fs.existsSync(path)
Versión síncrona de fs.exists.
66fs.access(path[, mode], callback)
Prueba los permisos de usuario en la ruta especificada.
67fs.accessSync(path[, mode])
Versión síncrona de fs.access.
68fs.createReadStream(path[, options])
Devuelve el objeto ReadStream.
69fs.createWriteStream(path[, options])
Devuelve el objeto WriteStream.
70fs.symlink(srcpath, dstpath[, type], callback)
La función de enlace síncrono asincrónica().La función de devolución de llamada no tiene parámetros, pero puede lanzar excepciones.

Para más información, consulte la descripción del módulo de archivos en el sitio web oficial:Sistema de archivos.