FileEncodingConverter
using Relativity.DataExchange.Io;
using Relativity.DataExchange.Logger;
using Relativity.Logging;
using System.Text;
using System.Threading;
namespace Relativity.DataExchange.Export.VolumeManagerV2.Download.EncodingHelpers
{
public class FileEncodingConverter : IFileEncodingConverter
{
private readonly IFileEncodingRewrite _encodingRewrite;
private readonly IFile _fileWrapper;
private readonly ILog _logger;
public FileEncodingConverter(IFileEncodingRewrite encodingRewrite, IFile fileWrapper, ILog logger)
{
_encodingRewrite = encodingRewrite;
_fileWrapper = fileWrapper;
_logger = logger;
}
public void Convert(string filePath, Encoding sourceEncoding, Encoding destinationEncoding, CancellationToken cancellationToken)
{
string text = filePath + ".tmp";
_logger.LogVerbose("Converting file {filePath} from {srcEnc} to {dstEnc}. Using temporary file {tmpFile}.", new object[4] {
filePath.Secure(),
sourceEncoding,
destinationEncoding,
text.Secure()
});
try {
_encodingRewrite.RewriteFile(filePath, text, sourceEncoding, destinationEncoding, cancellationToken);
_logger.LogVerbose("Removing source file {filePath}.", new object[1] {
filePath.Secure()
});
_fileWrapper.Delete(filePath);
_logger.LogVerbose("Moving temporary file from {tmpFile} to {dstFile}.", new object[2] {
text.Secure(),
filePath.Secure()
});
_fileWrapper.Move(text, filePath);
} finally {
if (_fileWrapper.Exists(text)) {
_logger.LogError("Error occurred during encoding conversion. Removing temporary file {tmpFile}.", new object[1] {
text.Secure()
});
_fileWrapper.Delete(text);
}
}
}
}
}