[flutter] 플러터에서 path_provider를 이용하여 디렉토리 복사하기

플러터는 경로를 관리하는 데에 유용한 path_provider 패키지를 제공합니다. 이 패키지를 사용하여 원하는 디렉토리를 다른 디렉토리로 복사하는 방법을 알아보겠습니다.

path_provider 패키지 설치하기

먼저, path_provider 패키지를 사용하기 위해서는 pubspec.yaml 파일에 다음과 같이 패키지를 추가해야 합니다:

dependencies:
  path_provider: ^2.0.4

설치를 완료하기 위해 터미널에서 다음 명령을 실행합니다:

flutter pub get

디렉토리 복사하기

path_provider 패키지를 통해 디렉토리를 복사하기 위해서는 먼저 원본 디렉토리와 대상 디렉토리의 경로를 얻어와야 합니다. copyDirectory 함수를 만들어서 이 작업을 수행해 보겠습니다.

import 'dart:io';
import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart';

Future<void> copyDirectory(String sourceDir, String targetDir) async {
  final sourceDirectory = Directory(sourceDir);
  final targetDirectory = Directory(targetDir);

  if (await targetDirectory.exists()) {
    throw Exception('Target directory already exists');
  }

  await targetDirectory.create(recursive: true);

  await for (var entity in sourceDirectory.list(recursive: true)) {
    if (entity is File) {
      final newPath = path.join(targetDirectory.path, path.basename(entity.path));
      await entity.copy(newPath);
    } else if (entity is Directory) {
      final newPath = path.join(targetDirectory.path, path.basename(entity.path));
      await Directory(newPath).create();
    }
  }
}

copyDirectory 함수는 주어진 원본 디렉토리와 대상 디렉토리를 받아와서, 대상 디렉토리가 존재하면 예외를 throw하고, 대상 디렉토리를 생성합니다. 그 후 루프를 통해 원본 디렉토리의 모든 파일과 디렉토리를 대상 디렉토리로 복사합니다.

이제 copyDirectory 함수를 사용하여 디렉토리를 복사할 수 있습니다.

final sourceDir = '/path/to/source/directory';
final targetDir = '/path/to/target/directory';

copyDirectory(sourceDir, targetDir)
  .then((_) => print('Directory copied successfully.'))
  .catchError((e) => print('Error: $e'));

위의 코드에서 sourceDirtargetDir를 각각 원본 디렉토리와 대상 디렉토리의 경로로 바꿔주어야 합니다. copyDirectory 함수를 호출하게 되면 디렉토리가 복사되고, 성공적으로 복사되었다는 메시지가 출력됩니다. 만약 에러가 발생하면 에러 메시지가 출력됩니다.

이제 path_provider 패키지를 사용하여 디렉토리를 복사하는 방법을 알게 되었습니다. 이를 통해 플러터 앱에서 유용한 기능을 구현할 수 있습니다.

참고 자료