exec method
Implementation
Future<void> exec({
required String filePath,
required String folderName,
required String fileName,
}) async {
try {
// ソースファイルの読み込みストリームを開く
final sourceFile = File(filePath);
final sourceFileStream = sourceFile.openRead();
late Directory directory;
if (_isAndroid) {
/// Androidの場合、外部ストレージに保存する
final directoryOptional = await getExternalStorageDirectory();
if (directoryOptional == null) {
throw ServiceException(
ServiceErrorType.directoryNotAccessError,
ServiceErrorType.directoryNotAccessError.message,
);
}
directory = directoryOptional;
} else {
/// iOSの場合、アプリ内に保存する
directory = await getApplicationDocumentsDirectory();
}
// 保存先のディレクトリパス
final saveDirectoryPath = '${directory.path}/$folderName';
// 保存先のディレクトリ
final saveDirectory = Directory(saveDirectoryPath);
// 保存先のディレクトリが存在しない場合、作成する
if (!saveDirectory.existsSync()) {
saveDirectory.createSync();
}
// 保存先のファイル
final file = File('$saveDirectoryPath/$fileName');
// ターゲットファイルの書き込みストリームを開く
final fileStream = file.openWrite();
// ソースストリームからターゲットストリームにデータをパイプする
await sourceFileStream.pipe(fileStream);
// 書き込みが完了したらフラッシュし、ストリームを閉じる
await fileStream.flush();
await fileStream.close();
return;
} on ServiceException catch (_) {
rethrow;
} catch (e) {
throw ServiceException(
ServiceErrorType.fileSaveError,
ServiceErrorType.fileSaveError.message,
);
}
}