Files
Wino-Mail/Wino.Core.UWP/Services/FileService.cs

63 lines
2.3 KiB
C#
Raw Normal View History

2024-04-18 01:44:37 +02:00
using System;
using System.IO;
2024-08-21 13:54:24 +02:00
using System.IO.Compression;
2024-04-18 01:44:37 +02:00
using System.Threading.Tasks;
using Windows.Storage;
2024-08-21 13:54:24 +02:00
using Wino.Core.Domain;
2024-04-18 01:44:37 +02:00
using Wino.Core.Domain.Interfaces;
namespace Wino.Core.UWP.Services
2024-04-18 01:44:37 +02:00
{
public class FileService : IFileService
2024-04-18 01:44:37 +02:00
{
public async Task<string> CopyFileAsync(string sourceFilePath, string destinationFolderPath)
{
var fileName = Path.GetFileName(sourceFilePath);
2024-04-18 01:44:37 +02:00
var sourceFileHandle = await StorageFile.GetFileFromPathAsync(sourceFilePath);
var destinationFolder = await StorageFolder.GetFolderFromPathAsync(destinationFolderPath);
2024-04-18 01:44:37 +02:00
var copiedFile = await sourceFileHandle.CopyAsync(destinationFolder, fileName, NameCollisionOption.GenerateUniqueName);
2024-04-18 01:44:37 +02:00
return copiedFile.Path;
}
2024-04-18 01:44:37 +02:00
public async Task<string> GetFileContentByApplicationUriAsync(string resourcePath)
{
var releaseNoteFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri(resourcePath));
2024-04-18 01:44:37 +02:00
return await FileIO.ReadTextAsync(releaseNoteFile);
}
2024-04-18 01:44:37 +02:00
public async Task<Stream> GetFileStreamAsync(string folderPath, string fileName)
{
var folder = await StorageFolder.GetFolderFromPathAsync(folderPath);
var createdFile = await folder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);
2024-08-21 13:54:24 +02:00
return await createdFile.OpenStreamForWriteAsync();
}
2024-08-21 13:54:24 +02:00
public async Task<bool> SaveLogsToFolderAsync(string logsFolder, string destinationFolder)
{
var logFiles = Directory.GetFiles(logsFolder, "*.log");
2024-08-21 13:54:24 +02:00
if (logFiles.Length == 0) return false;
2024-08-21 13:54:24 +02:00
using var fileStream = await GetFileStreamAsync(destinationFolder, Constants.LogArchiveFileName);
using var archive = new ZipArchive(fileStream, ZipArchiveMode.Create, true);
2024-08-21 13:54:24 +02:00
foreach (var logFile in logFiles)
{
using FileStream logFileStream = File.Open(logFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
2024-08-21 13:54:24 +02:00
var zipArchiveEntry = archive.CreateEntry(Path.GetFileName(logFile), CompressionLevel.Fastest);
using var zipStream = zipArchiveEntry.Open();
2024-08-21 13:54:24 +02:00
await logFileStream.CopyToAsync(zipStream);
}
2025-02-16 11:35:43 +01:00
return true;
}
2024-04-18 01:44:37 +02:00
}
}