fileInfo method

  1. @override
Future<Result<FileInfo, FileError>> fileInfo(
  1. String path
)
override

Returns metadata for the addressed path without following symlinks.

Implementation

@override
Future<Result<FileInfo, FileError>> fileInfo(String path) async {
  final resolved = _resolve(path);
  try {
    final stat = await FileStat.stat(resolved);
    final kind = switch (stat.type) {
      FileSystemEntityType.file => FileKind.file,
      FileSystemEntityType.directory => FileKind.directory,
      FileSystemEntityType.link => FileKind.symlink,
      _ => null,
    };
    if (kind == null) {
      return Err(
        FileError(
          FileErrorCode.invalid,
          'Unsupported file type',
          path: resolved,
        ),
      );
    }
    return Ok(
      FileInfo(
        name: resolved.split('/').last,
        path: resolved,
        kind: kind,
        size: stat.size,
        mtimeMs: stat.modified.millisecondsSinceEpoch,
      ),
    );
  } on Object catch (error) {
    return Err(_toFileError(error, resolved));
  }
}