fileInfo method
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);
// A missing path reports FileSystemEntityType.notFound — surface a
// real not-found instead of the misleading "Unsupported file type"
// (which only fits exotic nodes: sockets, fifos, devices).
if (stat.type == FileSystemEntityType.notFound) {
return Err(
FileError(
FileErrorCode.notFound,
'No such file or directory',
path: 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));
}
}