Spec-Zone.ru › Deno 1

Deno.FsFile

Абстракция Deno для чтения и записи файлов.

Это самый простой способ обработки файлов в Deno, и он рекомендуется вместо использования отдельных функций в пространстве имён Deno.

const file = await Deno.open("/foo/bar.txt", { read: true });
const fileInfo = await file.stat();
if (fileInfo.isFile) {
  const buf = new Uint8Array(100);
  const numberOfBytesRead = await file.read(buf); // 11 bytes
  const text = new TextDecoder().decode(buf);  // "hello world"
}
file.close();
class FsFile implements Reader, ReaderSync, Writer, WriterSync, Seeker, SeekerSync, Closer {
constructor(rid: number);
readonly readable: ReadableStream<Uint8Array>;
readonly rid: number;
readonly writable: WritableStream<Uint8Array>;
close(): void;
read(p: Uint8Array): Promise<number | null>;
readSync(p: Uint8Array): number | null;
seek(offset: number, whence: SeekMode): Promise<number>;
seekSync(offset: number, whence: SeekMode): number;
stat(): Promise<FileInfo>;
statSync(): FileInfo;
truncate(len?: number): Promise<void>;
truncateSync(len?: number): void;
write(p: Uint8Array): Promise<number>;
writeSync(p: Uint8Array): number;
}

Реализует

Reader
ReaderSync
Writer
WriterSync
Seeker
SeekerSync
Closer

Конструкторы

new FsFile(rid: number)

Конструктор, принимающий идентификатор ресурса. Как правило, FsFile не следует создавать напрямую. Вместо этого используйте Deno.open или Deno.openSync для создания нового экземпляра FsFile.

Свойства

readable: ReadableStream<Uint8Array>

Экземпляр ReadableStream, представляющий содержимое файла в виде байтов. Это упрощает взаимодействие с другими API, основанными на потоках веб-страниц.

const file = await Deno.open("my_file.txt", { read: true });
const decoder = new TextDecoder();
for await (const chunk of file.readable) {
  console.log(decoder.decode(chunk));
}
file.close();
rid: number

Идентификатор ресурса, связанный с экземпляром файла. Идентификатор ресурса следует рассматривать как непрозрачную ссылку на ресурс.

writable: WritableStream<Uint8Array>

Экземпляр WritableStream для записи содержимого файла. Это упрощает взаимодействие с другими API, основанными на потоках веб-страниц.

const items = ["hello", "world"];
const file = await Deno.open("my_file.txt", { write: true });
const encoder = new TextEncoder();
const writer = file.writable.getWriter();
for (const item of items) {
  await writer.write(encoder.encode(item));
}
file.close();

Методы

close(): void

Закрыть файл. Закрытие файла после завершения работы с ним важно для предотвращения утечки ресурсов.

const file = await Deno.open("my_file.txt");
// do work with "file" object
file.close();
read(p: Uint8Array): Promise<number | null>

Прочитать файл в буфер массива (p).

Возвращает количество прочитанных байтов во время операции или EOF (null) в случае отсутствия данных для чтения.

Возможна ситуация, когда чтение успешно возвращает 0 байтов. Это не означает EOF.

Не гарантируется, что весь буфер будет прочитан за один вызов.

// if "/foo/bar.txt" contains the text "hello world":
const file = await Deno.open("/foo/bar.txt");
const buf = new Uint8Array(100);
const numberOfBytesRead = await file.read(buf); // 11 bytes
const text = new TextDecoder().decode(buf);  // "hello world"
file.close();
readSync(p: Uint8Array): number | null

Синхронно прочитать из файла в буфер массива (p).

Возвращает количество прочитанных байтов во время операции или EOF (null) в случае отсутствия данных для чтения.

Возможна ситуация, когда чтение успешно возвращает 0 байтов. Это не означает EOF.

Не гарантируется, что весь буфер будет прочитан за один вызов.

// if "/foo/bar.txt" contains the text "hello world":
const file = Deno.openSync("/foo/bar.txt");
const buf = new Uint8Array(100);
const numberOfBytesRead = file.readSync(buf); // 11 bytes
const text = new TextDecoder().decode(buf);  // "hello world"
file.close();
seek(offset: number, whence: SeekMode): Promise<number>

Переместить указатель на заданную offset в режиме, заданном whence. Вызов возвращает новое положение в ресурсе (байты от начала).

// Given file pointing to file with "Hello world", which is 11 bytes long:
const file = await Deno.open(
  "hello.txt",
  { read: true, write: true, truncate: true, create: true },
);
await file.write(new TextEncoder().encode("Hello world"));

// advance cursor 6 bytes
const cursorPosition = await file.seek(6, Deno.SeekMode.Start);
console.log(cursorPosition);  // 6
const buf = new Uint8Array(100);
await file.read(buf);
console.log(new TextDecoder().decode(buf)); // "world"
file.close();

Режимы перемещения указателя работают следующим образом:

// Given file.rid pointing to file with "Hello world", which is 11 bytes long:
const file = await Deno.open(
  "hello.txt",
  { read: true, write: true, truncate: true, create: true },
);
await file.write(new TextEncoder().encode("Hello world"));

// Seek 6 bytes from the start of the file
console.log(await file.seek(6, Deno.SeekMode.Start)); // "6"
// Seek 2 more bytes from the current position
console.log(await file.seek(2, Deno.SeekMode.Current)); // "8"
// Seek backwards 2 bytes from the end of the file
console.log(await file.seek(-2, Deno.SeekMode.End)); // "9" (e.g. 11-2)
seekSync(offset: number, whence: SeekMode): number

Синхронно переместить указатель на заданную offset в режиме, заданном whence. Возвращается новое положение в ресурсе (байты от начала).

const file = Deno.openSync(
  "hello.txt",
  { read: true, write: true, truncate: true, create: true },
);
file.writeSync(new TextEncoder().encode("Hello world"));

// advance cursor 6 bytes
const cursorPosition = file.seekSync(6, Deno.SeekMode.Start);
console.log(cursorPosition);  // 6
const buf = new Uint8Array(100);
file.readSync(buf);
console.log(new TextDecoder().decode(buf)); // "world"
file.close();

Режимы перемещения указателя работают следующим образом:

// Given file.rid pointing to file with "Hello world", which is 11 bytes long:
const file = Deno.openSync(
  "hello.txt",
  { read: true, write: true, truncate: true, create: true },
);
file.writeSync(new TextEncoder().encode("Hello world"));

// Seek 6 bytes from the start of the file
console.log(file.seekSync(6, Deno.SeekMode.Start)); // "6"
// Seek 2 more bytes from the current position
console.log(file.seekSync(2, Deno.SeekMode.Current)); // "8"
// Seek backwards 2 bytes from the end of the file
console.log(file.seekSync(-2, Deno.SeekMode.End)); // "9" (e.g. 11-2)
file.close();
stat(): Promise<FileInfo>

Возвращает Deno.FileInfo для файла.

import { assert } from "https://deno.land/std/testing/asserts.ts";

const file = await Deno.open("hello.txt");
const fileInfo = await file.stat();
assert(fileInfo.isFile);
file.close();
statSync(): FileInfo

Синхронно возвращает Deno.FileInfo для файла.

import { assert } from "https://deno.land/std/testing/asserts.ts";

const file = Deno.openSync("hello.txt")
const fileInfo = file.statSync();
assert(fileInfo.isFile);
file.close();
truncate(len?: number): Promise<void>

Усекает (или расширяет) файл до указанной len. Если len не указано, всё содержимое файла усекается.

Усечение всего файла

const file = await Deno.open("my_file.txt", { write: true });
await file.truncate();
file.close();

Усечение части файла

// if "my_file.txt" contains the text "hello world":
const file = await Deno.open("my_file.txt", { write: true });
await file.truncate(7);
const buf = new Uint8Array(100);
await file.read(buf);
const text = new TextDecoder().decode(buf); // "hello w"
file.close();
truncateSync(len?: number): void

Синхронно усекает (или расширяет) файл до указанной len. Если len не указано, всё содержимое файла усекается.

Усечение всего файла

const file = Deno.openSync("my_file.txt", { write: true });
file.truncateSync();
file.close();

Усечение части файла

// if "my_file.txt" contains the text "hello world":
const file = Deno.openSync("my_file.txt", { write: true });
file.truncateSync(7);
const buf = new Uint8Array(100);
file.readSync(buf);
const text = new TextDecoder().decode(buf); // "hello w"
file.close();
write(p: Uint8Array): Promise<number>

Записать содержимое буфера массива (p) в файл.

Возвращает количество записанных байтов.

Не гарантируется, что весь буфер будет записан за один вызов.

const encoder = new TextEncoder();
const data = encoder.encode("Hello world");
const file = await Deno.open("/foo/bar.txt", { write: true });
const bytesWritten = await file.write(data); // 11
file.close();
writeSync(p: Uint8Array): number

Синхронно записать содержимое буфера массива (p) в файл.

Возвращает количество записанных байтов.

Не гарантируется, что весь буфер будет записан за один вызов.

const encoder = new TextEncoder();
const data = encoder.encode("Hello world");
const file = Deno.openSync("/foo/bar.txt", { write: true });
const bytesWritten = file.writeSync(data); // 11
file.close();

© 2018–2022 the Deno authors
https://doc.deno.land/deno/stable/~/Deno.FsFile

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API