Initial commit to new repository
This commit is contained in:
61
src/AxCopilot/Services/TempFileService.cs
Normal file
61
src/AxCopilot/Services/TempFileService.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System.IO;
|
||||
|
||||
namespace AxCopilot.Services;
|
||||
|
||||
/// <summary>
|
||||
/// 앱 내부 임시 파일 관리.
|
||||
/// %APPDATA%\AxCopilot\temp\ 에 임시 파일을 생성하고,
|
||||
/// 1일 이상 지난 파일을 자동으로 정리합니다.
|
||||
/// </summary>
|
||||
public static class TempFileService
|
||||
{
|
||||
private static readonly string TempDir = Path.Combine(
|
||||
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
|
||||
"AxCopilot", "temp");
|
||||
|
||||
/// <summary>
|
||||
/// 임시 파일 경로를 생성하고 반환합니다.
|
||||
/// 호출 시 1일 이상 지난 기존 임시 파일을 자동 정리합니다.
|
||||
/// </summary>
|
||||
/// <param name="prefix">파일명 접두사 (예: "clip_image")</param>
|
||||
/// <param name="extension">확장자 (예: ".png", ".txt")</param>
|
||||
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);
|
||||
}
|
||||
|
||||
/// <summary>1일 이상 지난 임시 파일을 삭제합니다. 열려 있는 파일은 건너뜁니다.</summary>
|
||||
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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user