statPath method

Future<void> statPath(
  1. String path
)

STAT with pathname: list file/directory info over the control connection (RFC 959 ยง4.1.3). Uses 213 for status replies sent over control.

Implementation

Future<void> statPath(String path) async {
  try {
    final dirContents = await fileOperations.listDirectory(path);
    sendResponse('213-Status of $path:');
    for (FileSystemEntity entity in dirContents) {
      try {
        var stat = await entity.stat();
        String permissions = _formatPermissions(stat);
        String fileSize = stat.size.toString();
        String modificationTime = _formatModificationTime(stat.modified);
        String fileName = entity.path.split(Platform.pathSeparator).last;
        sendResponse(
            ' $permissions 1 ftp ftp $fileSize $modificationTime $fileName');
      } catch (_) {
        continue;
      }
    }
    sendResponse('213 End of status');
  } catch (e) {
    // If path is a file, try to stat it directly
    try {
      String fullPath = fileOperations.resolvePath(path);
      File file = File(fullPath);
      if (await file.exists()) {
        var stat = await file.stat();
        String permissions = _formatPermissions(stat);
        String fileSize = stat.size.toString();
        String modificationTime = _formatModificationTime(stat.modified);
        String fileName = file.path.split(Platform.pathSeparator).last;
        sendResponse('213-Status of $path:');
        sendResponse(
            ' $permissions 1 ftp ftp $fileSize $modificationTime $fileName');
        sendResponse('213 End of status');
      } else {
        sendResponse('450 No such file or directory');
      }
    } catch (_) {
      sendResponse('450 No such file or directory');
    }
  }
}