.vscode
ADO2024
ADO2025
Day
Helpers
Exif
HelperCreateNoteFiles.cs
HelperDeleteEmptyDirectories.cs
HelperDirectory.cs
HelperFindReplace.cs
HelperGenealogicalDataCommunication.cs
HelperGit.cs
HelperILMerge.cs
HelperKanbanMetadata.cs
HelperLogMerge.cs
HelperMarkdown.cs
HelperNPM.cs
HelperPackageFilesByDate.cs
HelperPdfStripperWrapper.cs
HelperRenameToOldMoveDeleteOld.cs
HelperSaveOrCopyContents.cs
HelperStart.cs
HelperTooLong.cs
HelperZipFilesBy.cs
RijndaelEncryption.cs
Models
Scripts
Server-Management
.editorconfig
.gitignore
.prettierignore
Dockerfile
File-Folder-Helper.csproj
Program.cs
README.md
Worker.cs
docker-compose.yaml
global.json
package-lock.json
package.json
95 lines
3.0 KiB
C#
95 lines
3.0 KiB
C#
using Microsoft.Extensions.Logging;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace File_Folder_Helper.Helpers;
|
|
|
|
internal static class HelperFindReplace
|
|
{
|
|
|
|
private static string? GetTnsNamesOraFile(List<string> args)
|
|
{
|
|
string? result = null;
|
|
for (int i = 1; i < args.Count; i++)
|
|
{
|
|
if (args[i].Length == 2 && i + 1 < args.Count)
|
|
{
|
|
if (args[i][1] == 't')
|
|
result = Path.GetFullPath(args[i + 1]);
|
|
i++;
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private static ReadOnlyCollection<(string, string)> GetFindReplace(string tnsNamesOraFile)
|
|
{
|
|
List<(string, string)> results = [];
|
|
string[] segments;
|
|
string[] lines = File.ReadAllLines(tnsNamesOraFile);
|
|
foreach (string line in lines)
|
|
{
|
|
segments = line.Split('=');
|
|
if (segments.Length < 3)
|
|
continue;
|
|
results.Add((segments[0].Trim(), line));
|
|
}
|
|
return new(results);
|
|
}
|
|
|
|
private static void FindReplace(ILogger log, string[] files, ReadOnlyCollection<(string, string)> findReplace)
|
|
{
|
|
bool check;
|
|
string[] lines;
|
|
string[] segments;
|
|
foreach (string file in files)
|
|
{
|
|
check = false;
|
|
lines = File.ReadAllLines(file);
|
|
for (int i = 0; i < lines.Length; i++)
|
|
{
|
|
segments = lines[i].Split('=');
|
|
if (segments.Length < 3)
|
|
continue;
|
|
foreach ((string find, string replace) in findReplace)
|
|
{
|
|
if (!segments[0].Contains(find))
|
|
continue;
|
|
if (lines[i] == replace)
|
|
continue;
|
|
if (!check)
|
|
check = true;
|
|
lines[i] = replace;
|
|
}
|
|
}
|
|
if (check)
|
|
{
|
|
log.LogInformation("{file}", file);
|
|
File.WriteAllLines(file, lines);
|
|
}
|
|
}
|
|
}
|
|
|
|
internal static void UpdateTnsNames(ILogger log, List<string> args)
|
|
{
|
|
string? tnsNamesOraFile = GetTnsNamesOraFile(args);
|
|
ReadOnlyCollection<(string, string)> findReplace;
|
|
if (!string.IsNullOrEmpty(tnsNamesOraFile) && File.Exists(tnsNamesOraFile))
|
|
findReplace = GetFindReplace(tnsNamesOraFile);
|
|
else
|
|
{
|
|
log.LogInformation("<{tnsNamesOraFile}> doesn't exist!", tnsNamesOraFile);
|
|
findReplace = new(Array.Empty<(string, string)>());
|
|
}
|
|
if (findReplace.Count == 0)
|
|
log.LogInformation("Count == {count}", findReplace.Count);
|
|
else
|
|
{
|
|
string[] files = Directory.GetFiles(args[0], "tnsNames.ora", SearchOption.AllDirectories);
|
|
if (files.Length == 0)
|
|
log.LogInformation("Length == {length}", files.Length);
|
|
else
|
|
FindReplace(log, files, findReplace);
|
|
}
|
|
}
|
|
|
|
} |