mirror of https://github.com/Trivernis/GAIA.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
472 lines
13 KiB
C#
472 lines
13 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.IO;
|
|
using System.Xml;
|
|
|
|
namespace GAIA
|
|
{
|
|
namespace Files
|
|
{
|
|
//A File to save dictionaries
|
|
public class DictionaryFile
|
|
{
|
|
private const string extension = ".dic";
|
|
private FileInfo file;
|
|
private Dictionary<string, string> dictA;
|
|
|
|
|
|
public DictionaryFile(string name)
|
|
{
|
|
dictA = new Dictionary<string, string>();
|
|
createDictionaryFile(name, "Data");
|
|
}
|
|
|
|
public DictionaryFile(string name, string directory)
|
|
{
|
|
dictA = new Dictionary<string, string>();
|
|
createDictionaryFile(name, directory);
|
|
}
|
|
|
|
private void createDictionaryFile(string name, string directory)
|
|
{
|
|
//saving in standard directory 'Data'
|
|
if (!Directory.Exists(directory))
|
|
{
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
var fn = directory + "/" + name;
|
|
|
|
//adding the extension .list if not existing
|
|
if (!name.Contains(extension))
|
|
{
|
|
fn += extension;
|
|
}
|
|
|
|
file = new FileInfo(fn);
|
|
//reading the file if existent
|
|
|
|
if (file.Exists)
|
|
{
|
|
readFile();
|
|
}
|
|
else
|
|
{
|
|
using (StreamWriter sw = file.CreateText())
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
private void readFile()
|
|
{
|
|
foreach (var line in File.ReadAllLines(file.FullName))
|
|
{
|
|
try
|
|
{
|
|
var l = line.Split('|');
|
|
dictA.Add(l[0], l[1]);
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
|
|
public void add(string key, string value)
|
|
{
|
|
dictA.Add(key, value);
|
|
|
|
using (StreamWriter sw = file.AppendText())
|
|
{
|
|
sw.WriteLine(key + "|" + value);
|
|
}
|
|
}
|
|
|
|
public void remove(string key)
|
|
{
|
|
//removing the item by key
|
|
dictA.Remove(key);
|
|
var lines = File.ReadAllLines(file.FullName);
|
|
|
|
using (StreamWriter sw = file.CreateText())
|
|
{
|
|
foreach(var line in lines)
|
|
{
|
|
if(!line.Split('|')[0].Equals(key))
|
|
{
|
|
sw.WriteLine(line);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void clear()
|
|
{
|
|
dictA.Clear();
|
|
|
|
//Clearing the file
|
|
using (StreamWriter sw = file.CreateText())
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public Dictionary<string, string> getDictionary()
|
|
{
|
|
return dictA;
|
|
}
|
|
|
|
public void Delete()
|
|
{
|
|
file.Delete();
|
|
}
|
|
|
|
public void MoveTo(string path)
|
|
{
|
|
file.MoveTo(path);
|
|
}
|
|
|
|
public void CopyTo(string path)
|
|
{
|
|
file.CopyTo(path);
|
|
}
|
|
}
|
|
|
|
//A File to save lists
|
|
public class ListFile
|
|
{
|
|
//a file to store some lists in
|
|
|
|
private FileInfo file;
|
|
private List<string> listA;
|
|
private const string extension = ".lst";
|
|
|
|
public ListFile(string name)
|
|
{
|
|
listA = new List<string>();
|
|
createListFile(name, "Data");
|
|
}
|
|
|
|
public ListFile(string name, string directory)
|
|
{
|
|
listA = new List<string>();
|
|
createListFile(name, directory);
|
|
}
|
|
|
|
private void createListFile(string name, string directory)
|
|
{
|
|
//saving in standard directory 'Data'
|
|
if (!Directory.Exists(directory))
|
|
{
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
var fn = directory + "/" + name;
|
|
|
|
//adding the extension .list if not existing
|
|
if (!name.Contains(extension))
|
|
{
|
|
fn += extension;
|
|
}
|
|
|
|
file = new FileInfo(fn);
|
|
//reading the file if existent
|
|
|
|
if (file.Exists)
|
|
{
|
|
readFile();
|
|
}
|
|
else
|
|
{
|
|
using (StreamWriter sw = file.CreateText())
|
|
{
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
public void readFile()
|
|
{
|
|
//clearing the list to prevent doubled items
|
|
listA.Clear();
|
|
//reading the file line by line to list
|
|
|
|
foreach (var line in File.ReadAllLines(file.FullName))
|
|
{
|
|
listA.Add(line);
|
|
}
|
|
}
|
|
|
|
public void add(string item)
|
|
{
|
|
//first appending item to list, then writing it to file
|
|
listA.Add(item);
|
|
|
|
using (StreamWriter sw = file.AppendText())
|
|
{
|
|
sw.WriteLine(item);
|
|
}
|
|
}
|
|
|
|
public void remove(int id)
|
|
{
|
|
listA.RemoveAt(id);
|
|
var cId = 0;
|
|
//getting the lines of the file
|
|
var lines = File.ReadAllLines(file.FullName);
|
|
|
|
//writing and skipping the line with the named id
|
|
using (StreamWriter sw = file.AppendText())
|
|
{
|
|
foreach (var line in lines)
|
|
{
|
|
if (cId != id)
|
|
{
|
|
sw.WriteLine(line);
|
|
}
|
|
cId++;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void clear()
|
|
{
|
|
//clearing list and overwriting file
|
|
listA.Clear();
|
|
|
|
using (StreamWriter sw = file.CreateText())
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public List<string> getList()
|
|
{
|
|
return listA;
|
|
}
|
|
|
|
public void Delete()
|
|
{
|
|
file.Delete();
|
|
}
|
|
|
|
public void MoveTo(string destFileName)
|
|
{
|
|
file.MoveTo(destFileName);
|
|
}
|
|
|
|
public void CopyTo(string destFileName)
|
|
{
|
|
file.CopyTo(destFileName);
|
|
}
|
|
}
|
|
|
|
//The standard Logfile
|
|
public class LogFile
|
|
{
|
|
public FileInfo logfile;
|
|
public bool withTime = true;
|
|
public string timestring = "HH:mm:ss";
|
|
|
|
string executable;
|
|
|
|
public LogFile()
|
|
{
|
|
//choosing the name of the current executable as logfilename
|
|
executable = System.AppDomain.CurrentDomain.FriendlyName;
|
|
logfile = new FileInfo(executable.Replace(".exe", "") + ".log");
|
|
}
|
|
|
|
public LogFile(string path)
|
|
{
|
|
//logfile with chosen path
|
|
logfile = new FileInfo(path);
|
|
}
|
|
|
|
private void writeLogStart()
|
|
{
|
|
//creating or overwriting the logfile and writing the head
|
|
using (StreamWriter sw = logfile.CreateText())
|
|
{
|
|
sw.WriteLine("Started logging at " + DateTime.Now.ToString(@"yyyy/MM/dd_HH:mm:ss") + " with executable " + executable);
|
|
}
|
|
}
|
|
|
|
public void log(string data)
|
|
{
|
|
//the user decides whether he wants a the datetimestring or not
|
|
using (StreamWriter sw = logfile.AppendText())
|
|
{
|
|
if (withTime)
|
|
{
|
|
sw.WriteLine(DateTime.Now.ToString(timestring) + ": " + data);
|
|
}
|
|
else
|
|
{
|
|
sw.WriteLine(data);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void dump(string path)
|
|
{
|
|
//storing the file in the given path
|
|
try
|
|
{
|
|
logfile.MoveTo(path);
|
|
}
|
|
catch { log("{Gaia.Logging} [!!] Failed moving this file"); }
|
|
}
|
|
|
|
public void dump()
|
|
{
|
|
//storing the file in directory Logs
|
|
if (!Directory.Exists("Logs"))
|
|
{
|
|
Directory.CreateDirectory("Logs");
|
|
}
|
|
|
|
int count = 1;
|
|
string filename = "Logs/" + DateTime.Now.ToString("YY-MM-DD");
|
|
|
|
//counting in the filename while the file would overwrite an older one
|
|
while (File.Exists(filename + ".log"))
|
|
{
|
|
filename.Replace("_" + count, "");
|
|
count++;
|
|
filename += "_" + count;
|
|
}
|
|
|
|
try
|
|
{
|
|
logfile.MoveTo(filename + ".log");
|
|
}
|
|
catch { log("{Gaia.Logging} [!!] Failed moving this file"); }
|
|
}
|
|
}
|
|
|
|
public class XMLDictionaryFile
|
|
{
|
|
private XmlDocument document;
|
|
private FileInfo file;
|
|
const string extension = ".dix";
|
|
|
|
public XMLDictionaryFile(string name)
|
|
{
|
|
createFile(name, "Data/");
|
|
}
|
|
|
|
public XMLDictionaryFile(string name, string directory)
|
|
{
|
|
createFile(name, directory);
|
|
}
|
|
|
|
private void createFile(string name, string directory)
|
|
{
|
|
document = new XmlDocument();
|
|
|
|
if(!Directory.Exists(directory))
|
|
{
|
|
Directory.CreateDirectory(directory);
|
|
}
|
|
|
|
if (!name.Contains(".dix"))
|
|
{
|
|
name += extension;
|
|
}
|
|
|
|
name = directory+"/" + name;
|
|
|
|
file = new FileInfo(name);
|
|
|
|
if (file.Exists)
|
|
{
|
|
document.Load(file.FullName);
|
|
}
|
|
else
|
|
{
|
|
XmlElement meta = document.CreateElement("meta");
|
|
meta.SetAttribute("creator", AppDomain.CurrentDomain.FriendlyName);
|
|
meta.SetAttribute("creationtime", DateTime.Now.ToString());
|
|
}
|
|
|
|
save();
|
|
}
|
|
|
|
private void save()
|
|
{
|
|
document.Save(file.FullName);
|
|
}
|
|
|
|
public void append(string key,string value)
|
|
{
|
|
XmlElement keyElement = document.CreateElement(key);
|
|
keyElement.InnerText = value;
|
|
save();
|
|
}
|
|
|
|
public void append(string key, XmlElement value)
|
|
{
|
|
document.CreateElement(key).InnerXml = value.OuterXml;
|
|
save();
|
|
}
|
|
|
|
public void append(string key, string value, Dictionary<string,string> attributes)
|
|
{
|
|
var keyElement = document.CreateElement(key);
|
|
keyElement.InnerText = value;
|
|
|
|
foreach(var attribute in attributes)
|
|
{
|
|
keyElement.SetAttribute(attribute.Key,attribute.Value);
|
|
}
|
|
save();
|
|
}
|
|
}
|
|
|
|
public class IOAdditions
|
|
{
|
|
public LogFile logfile;
|
|
|
|
public IOAdditions()
|
|
{
|
|
logfile = new LogFile();
|
|
}
|
|
|
|
public IOAdditions(LogFile lf)
|
|
{
|
|
logfile = lf;
|
|
}
|
|
|
|
public bool copyDirectory(string sourcepath, string targetpath)
|
|
{
|
|
return copy(new DirectoryInfo(sourcepath), targetpath);
|
|
}
|
|
|
|
private bool copy(DirectoryInfo di, string target)
|
|
{
|
|
|
|
try
|
|
{
|
|
target += "/"+di.Name;
|
|
|
|
foreach(var file in di.GetFiles())
|
|
{
|
|
file.CopyTo(target + "/" + file.Name);
|
|
}
|
|
|
|
foreach(var dir in di.GetDirectories())
|
|
{
|
|
copy(dir, target);
|
|
}
|
|
return true;
|
|
}
|
|
catch (Exception ex) { logfile.log(ex.ToString()); return false; }
|
|
}
|
|
}
|
|
}
|
|
}
|