statPath method
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');
}
}
}