QuellCode/CentronERP war nur als Gitlink (Submodul-Referenz auf 79c1142) getrackt, ohne .gitmodules und ohne erreichbares Remote. Der Untersuchungsgegenstand der Versuchsreihe war damit nicht reproduzierbar gesichert: Ein Klon haette ein leeres Verzeichnis erhalten, und die Belege der 3.287 Anforderungen waeren nicht ueberpruefbar gewesen. Umstellung: - Historie nach c:\DEV\CentronERP_git_snapshot_79c1142 ausgelagert (vollstaendig lesbar, enthaelt 79c1142 und Vorgaenger 89ccfd6) - Gitlink aus dem Index entfernt - Dateiinhalt aufgenommen: 24.557 Dateien, rund 333 MB Die verschachtelte .gitignore der Codebasis gilt weiter, Build-Artefakte bleiben ausgeschlossen. Details in Versuche/Versuch_01/_Codebasis-Nachweis.md
116 lines
4.6 KiB
C#
116 lines
4.6 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Text.RegularExpressions;
|
|
using System.Xml;
|
|
using System.Xml.Linq;
|
|
using System.Xml.Serialization;
|
|
|
|
namespace Scripts
|
|
{
|
|
public static class FileHelper
|
|
{
|
|
public static void DeleteSubDirectoriesOtherThan(string directory, params string[] allowedSubDirectories)
|
|
{
|
|
var allowedSubDirectoriesFullPaths = allowedSubDirectories.Select(f => Path.Combine(directory, f)).ToList();
|
|
var allSubDirectories = Directory.GetDirectories(directory);
|
|
foreach (var subDirectory in allSubDirectories)
|
|
{
|
|
if (allowedSubDirectoriesFullPaths.Contains(subDirectory) == false)
|
|
{
|
|
DeleteDirectory(subDirectory);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void DeleteDirectory(string directory)
|
|
{
|
|
if (Directory.Exists(directory) == false)
|
|
return;
|
|
|
|
Directory.Delete(directory, recursive: true);
|
|
}
|
|
|
|
public static void MoveDirectory(string fromDirectory, string toDirectory)
|
|
{
|
|
MoveFiles(fromDirectory, toDirectory, "*.*");
|
|
}
|
|
|
|
public static void MoveFiles(string fromDirectory, string toDirectory, string filePattern = "*.*", SearchOption searchOption = SearchOption.AllDirectories, bool skipAlreadyExistingFiles = false)
|
|
{
|
|
MoveOrCopyFilesInternal((file, targetFile) => File.Move(file, targetFile), fromDirectory, toDirectory, filePattern, searchOption, skipAlreadyExistingFiles);
|
|
}
|
|
|
|
public static void CopyFiles(string fromDirectory, string toDirectory, string filePattern = "*.*", SearchOption searchOption = SearchOption.AllDirectories, bool skipAlreadyExistingFiles = false)
|
|
{
|
|
MoveOrCopyFilesInternal((file, targetFile) => File.Copy(file, targetFile), fromDirectory, toDirectory, filePattern, searchOption, skipAlreadyExistingFiles);
|
|
}
|
|
|
|
private static void MoveOrCopyFilesInternal(Action<string, string> action, string fromDirectory, string toDirectory, string filePattern = "*.*", SearchOption searchOption = SearchOption.AllDirectories, bool skipAlreadyExistingFiles = false)
|
|
{
|
|
if (Directory.Exists(toDirectory) == false)
|
|
Directory.CreateDirectory(toDirectory);
|
|
|
|
foreach (var file in Directory.GetFiles(fromDirectory, filePattern, searchOption))
|
|
{
|
|
var targetFile = file.Replace(fromDirectory, toDirectory, StringComparison.Ordinal) ?? string.Empty;
|
|
var targetDirectory = Path.GetDirectoryName(targetFile) ?? string.Empty;
|
|
|
|
if (Directory.Exists(targetDirectory) == false)
|
|
Directory.CreateDirectory(targetDirectory);
|
|
|
|
if (skipAlreadyExistingFiles && File.Exists(targetFile))
|
|
continue;
|
|
|
|
action(file, targetFile);
|
|
}
|
|
}
|
|
|
|
public static void DeleteFiles(string directory, string filePattern)
|
|
{
|
|
foreach (var file in Directory.GetFiles(directory, filePattern))
|
|
{
|
|
File.Delete(file);
|
|
}
|
|
}
|
|
|
|
public static void RenameFile(string directory, string fileName, string newFileName)
|
|
{
|
|
File.Move(Path.Combine(directory, fileName), Path.Combine(directory, newFileName));
|
|
}
|
|
|
|
public static void ZipDirectory(string directory, string outputFilePath)
|
|
{
|
|
if (File.Exists(outputFilePath))
|
|
File.Delete(outputFilePath);
|
|
|
|
var outputDirectory = Path.GetDirectoryName(outputFilePath) ?? throw new ArgumentException("Invalid output filepath.", nameof(outputFilePath));
|
|
if (Directory.Exists(outputDirectory) == false)
|
|
Directory.CreateDirectory(outputDirectory);
|
|
|
|
ZipFile.CreateFromDirectory(directory, outputFilePath);
|
|
}
|
|
|
|
public static void ZipSingleFile(string file, string outputFilePath)
|
|
{
|
|
var tempDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N"));
|
|
Directory.CreateDirectory(tempDirectory);
|
|
|
|
var targetFilePath = Path.Combine(tempDirectory, Path.GetFileName(file));
|
|
|
|
File.Move(file, targetFilePath);
|
|
|
|
ZipDirectory(tempDirectory, outputFilePath);
|
|
Directory.Delete(tempDirectory, recursive: true);
|
|
}
|
|
|
|
public static void ExtractZip(string archive, string directory)
|
|
{
|
|
ZipFile.ExtractToDirectory(archive, directory);
|
|
}
|
|
}
|
|
}
|