import 'dart:typed_data'; /// 파일 선택·폴더 접근 경계. /// /// Windows: 일반 파일 경로 (dart:io) /// Android: (이식 시) 저장소 접근 프레임워크(SAF) 권한 처리 abstract class StorageService { Future> pickVideos(); Future> pickSubtitles({String? initialDirectory}); /// 확장자로 거른 파일 여러 개 고르기 (PDF 에 넣을 그림 등) Future> pickFiles({required String title, required List extensions, String? initialDirectory}); /// 폴더 안의 파일 경로 목록 (하위 폴더 제외) Future> listFiles(String directory); Future ensureDirectory(String directory); Future exists(String path); /// 문자셋 판별용으로 파일 앞부분 읽기 Future> readHead(String path, int maxBytes); Future readBytes(String path); Future fileSize(String path); /// 파일의 [start] 위치부터 최대 [length] 바이트 (영상 해시 계산용) Future readRange(String path, int start, int length); Future writeBytes(String path, Uint8List bytes); Future delete(String path); /// P0: [from] (다 만든 임시 파일) 을 [to] 이름으로 바꿔 넣는다 ([to] 가 있으면 그것을 지우고) Future replaceFile(String from, String to); /// 앱 전용 임시 폴더 Future tempDirectory(); /// "다른 이름으로 저장" 대화상자. 저장한 위치를 돌려주고, 취소하면 null. Future saveAs({ required String fileName, required Uint8List bytes, String? initialDirectory, }); }