namespace ShengShengBuXi.ConsoleApp.Services;
///
/// 音频文件服务实现
///
public class AudioFileService : IAudioFileService
{
private readonly SemaphoreSlim _fileLock = new(1, 1);
///
/// 更新音频文件
///
/// 文件名
/// 文件数据
public async Task UpdateAudioFileAsync(string fileName, byte[] fileData)
{
if (string.IsNullOrEmpty(fileName) || fileData == null || fileData.Length == 0)
{
Console.WriteLine("音频文件名为空或文件数据为空");
return;
}
// 获取文件的完整路径
string filePath = Path.Combine(
Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "mp3"),
fileName);
await _fileLock.WaitAsync();
try
{
// 确保目录存在
string directory = Path.GetDirectoryName(filePath) ?? string.Empty;
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
// 写入文件
await File.WriteAllBytesAsync(filePath, fileData);
Console.WriteLine($"已更新音频文件: {fileName}");
}
catch (Exception ex)
{
Console.WriteLine($"更新音频文件失败: {ex.Message}");
}
finally
{
_fileLock.Release();
}
}
///
/// 确保音频文件目录存在
///
/// 基础路径
public void EnsureAudioDirectoryExists(string basePath)
{
string fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, basePath);
if (!Directory.Exists(fullPath))
{
try
{
Directory.CreateDirectory(fullPath);
Console.WriteLine($"已创建音频目录: {fullPath}");
}
catch (Exception ex)
{
Console.WriteLine($"创建音频目录失败: {ex.Message}");
throw new DirectoryNotFoundException($"无法创建音频目录: {fullPath}", ex);
}
}
}
}