using System.IO;
namespace AxCopilot.Services;
///
/// 앱 내부 임시 파일 관리.
/// %APPDATA%\AxCopilot\temp\ 에 임시 파일을 생성하고,
/// 1일 이상 지난 파일을 자동으로 정리합니다.
///
public static class TempFileService
{
private static readonly string TempDir = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"AxCopilot", "temp");
///
/// 임시 파일 경로를 생성하고 반환합니다.
/// 호출 시 1일 이상 지난 기존 임시 파일을 자동 정리합니다.
///
/// 파일명 접두사 (예: "clip_image")
/// 확장자 (예: ".png", ".txt")
public static string CreateTempFile(string prefix, string extension)
{
Directory.CreateDirectory(TempDir);
CleanupOldFiles();
var fileName = $"{prefix}_{DateTime.Now:yyyyMMdd_HHmmss_fff}{extension}";
return Path.Combine(TempDir, fileName);
}
/// 1일 이상 지난 임시 파일을 삭제합니다. 열려 있는 파일은 건너뜁니다.
private static void CleanupOldFiles()
{
try
{
if (!Directory.Exists(TempDir)) return;
var cutoff = DateTime.Now.AddDays(-1);
foreach (var file in Directory.EnumerateFiles(TempDir))
{
try
{
if (File.GetCreationTime(file) < cutoff)
File.Delete(file);
}
catch (IOException)
{
// 파일이 열려 있음 — 건너뛰기
}
catch (UnauthorizedAccessException)
{
// 권한 없음 — 건너뛰기
}
}
}
catch (Exception ex)
{
LogService.Debug($"임시 파일 정리 중 오류: {ex.Message}");
}
}
}