for Push.

This commit is contained in:
nobobo
2026-06-01 13:23:34 +09:00
parent 9e093ea99f
commit a6550e9928
93 changed files with 10393 additions and 0 deletions
+141
View File
@@ -0,0 +1,141 @@
using DocumentFormat.OpenXml.Vml;
using KssSmaPlaLib.Commons;
using KssSmaPlaLib.Exchange.Interfaces;
using Org.BouncyCastle.Asn1;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Path = System.IO.Path;
namespace KssSmaPlaLib.IO.File
{
public static class FileUxer
{
/// <summary>
/// テキストファイル出力(全テキスト一括)
/// </summary>
/// <param name="allLineText">全テキスト</param>
/// <param name="filePath">ファイルパス</param>
/// <param name="resultMessage">メッセージ</param>
/// <param name="encodingType">文字コード</param>
/// <returns>成否</returns>
public static bool WriteAllText(string allLineText, string filePath, out string resultMessage, EncodingUxer.EncodingType encodingType = EncodingUxer.EncodingType.Utf8WithoutBom)
{
resultMessage = string.Empty;
try
{
System.IO.File.WriteAllText(filePath, allLineText, EncodingUxer.GetEncoding(encodingType));
return true;
}
catch (Exception ex)
{
resultMessage = $"CSV出力に失敗しました。[ファイルパス:{filePath},エラー内容:{ex.Message}]";
return false;
}
}
public static bool TryDeletePatternFiles(
string folderPath,
string fileNamePattern,
out int fileCount,
out string resultMessage)
{
fileCount = 0;
resultMessage = string.Empty;
if (!Directory.Exists(folderPath))
{
resultMessage = $"フォルダが存在しません。[フォルダパス:{folderPath}]";
return false;
}
try
{
var files = Directory.GetFiles(folderPath, fileNamePattern);
foreach (var filePath in files)
{
System.IO.File.Delete(filePath);
fileCount++;
}
return true;
}
catch (Exception ex)
{
resultMessage = $"ファイル削除中にエラーが発生しました。[フォルダパス:{folderPath},ファイル名パターン:{fileNamePattern},エラー内容:{ex.Message}]";
return false;
}
}
public static string GetTimestampedFileName(string originalName, DateTime dt, string prefixDtFormat, string suffixDtFormat)
{
string nameWithoutExt = Path.GetFileNameWithoutExtension(originalName);
string ext = Path.GetExtension(originalName);
string prefixDtStr = dt.ToString(prefixDtFormat);
string suffixDtStr = dt.ToString(suffixDtFormat);
string newName = prefixDtStr + nameWithoutExt + suffixDtStr;
return newName + ext;
}
public static bool CheckParentFolderExists(string folderPath, out string parentPath)
{
parentPath = Path.GetDirectoryName(folderPath);
return Directory.Exists(parentPath);
}
public static bool TryApplyActionToFiles<T>(
string folderPath,
Func<FileInfo, bool> condition,
Action<FileInfo> action,
out int fileCount,
out string resultMessage,
string actionName = "操作",
bool isDescending = true,
Func<FileInfo, T> sortKey = null,
int skip = 0)
{
fileCount = 0;
resultMessage = string.Empty;
try
{
// 条件未指定時は全件対象
condition = condition ?? (_ => true);
// 一旦条件で取得
var files = new DirectoryInfo(folderPath)
.GetFiles()
.Where(condition);
// ソートキー作成
var keySelector =
sortKey != null ? (Func<FileInfo, object>)
(f => sortKey(f)) : f => f.LastWriteTime;
// ソート+スキップ+リスト化
var filesList =
(isDescending ?
files.OrderByDescending(keySelector) :
files.OrderBy(keySelector))
.Skip(skip)
.ToList();
foreach (var file in filesList)
{
action(file);
LoggerUxer.Info($"{actionName}しました。[{file}]");
}
fileCount = filesList.Count;
return true;
}
catch (Exception ex)
{
resultMessage = $"ファイル群の{actionName}に失敗しました。[エラー内容:{ex.Message}]";
return false;
}
}
}
}