|
|
|
import 'dart:io';
|
|
|
|
import 'package:win_text_editor/app/models/file_node.dart';
|
|
|
|
|
|
|
|
class FileService {
|
|
|
|
/// 延时加载目录内容(不递归)
|
|
|
|
static Future<List<FileNode>> listDirectory(String path, {int parentDepth = 0}) async {
|
|
|
|
final directory = Directory(path);
|
|
|
|
final List<FileNode> nodes = [];
|
|
|
|
|
|
|
|
if (await directory.exists()) {
|
|
|
|
final entities = directory.listSync();
|
|
|
|
|
|
|
|
// 遍历目录实体并创建FileNode
|
|
|
|
for (final entity in entities) {
|
|
|
|
nodes.add(
|
|
|
|
FileNode(
|
|
|
|
name: entity.path.split(Platform.pathSeparator).last,
|
|
|
|
path: entity.path,
|
|
|
|
isDirectory: entity is Directory,
|
|
|
|
depth: parentDepth + 1,
|
|
|
|
children: [],
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
// 排序:文件夹在前按字母排序,文件在后按字母排序
|
|
|
|
nodes.sort((a, b) {
|
|
|
|
if (a.isDirectory && !b.isDirectory) {
|
|
|
|
return -1; // a是文件夹,b是文件,a排在前面
|
|
|
|
} else if (!a.isDirectory && b.isDirectory) {
|
|
|
|
return 1; // a是文件,b是文件夹,b排在前面
|
|
|
|
} else {
|
|
|
|
// 都是文件夹或都是文件时,按名称字母排序
|
|
|
|
return a.name.compareTo(b.name);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
return nodes;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// 递归构建完整文件树(原方法保留备用)
|
|
|
|
static Future<List<FileNode>> buildFileTree(String rootPath) async {
|
|
|
|
final rootDirectory = Directory(rootPath);
|
|
|
|
final List<FileNode> nodes = [];
|
|
|
|
|
|
|
|
if (await rootDirectory.exists()) {
|
|
|
|
final entities = rootDirectory.listSync();
|
|
|
|
|
|
|
|
for (final entity in entities) {
|
|
|
|
final node = FileNode(
|
|
|
|
name: entity.path.split(Platform.pathSeparator).last,
|
|
|
|
path: entity.path,
|
|
|
|
isDirectory: entity is Directory,
|
|
|
|
);
|
|
|
|
|
|
|
|
if (entity is Directory) {
|
|
|
|
node.children.addAll(await buildFileTree(entity.path));
|
|
|
|
}
|
|
|
|
|
|
|
|
nodes.add(node);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nodes;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Future<String> readFile(String filePath) async {
|
|
|
|
return await File(filePath).readAsString();
|
|
|
|
}
|
|
|
|
|
|
|
|
static Future<void> writeFile(String filePath, String content) async {
|
|
|
|
await File(filePath).writeAsString(content);
|
|
|
|
}
|
|
|
|
}
|