Ich versuche, ein Array von FileInfo- und DirectoryInfo-Objekten zur Verwendung als Protokolldatei zu speichern. Ziel ist es, ein Bild eines Verzeichnisses (und von Unterverzeichnissen) zu einem Zeitpunkt für einen späteren Vergleich zu erfassen. Ich bin derzeit mit dieser Klasse die Informationen zu speichern:FileSystemInfo-Array in Datei speichern
public class myFSInfo
{
public FileSystemInfo Dir;
public string RelativePath;
public string BaseDirectory;
public myFSInfo(FileSystemInfo dir, string basedir)
{
Dir = dir;
BaseDirectory = basedir;
RelativePath = Dir.FullName.Substring(basedir.Length + (basedir.Last() == '\\' ? 1 : 2));
}
private myFSInfo() { }
/// <summary>
/// Copies a FileInfo or DirectoryInfo object to the specified path, creating folders and overwriting if necessary.
/// </summary>
/// <param name="path"></param>
public void CopyTo(string path)
{
if (Dir is FileInfo)
{
var f = (FileInfo)Dir;
Directory.CreateDirectory(path.Substring(0,path.LastIndexOf("\\")));
f.CopyTo(path,true);
}
else if (Dir is DirectoryInfo) Directory.CreateDirectory(path);
}
}
ich versucht habe, XML und Binary meine Klasse ohne Glück Serialisierung. Ich habe auch versucht, eine neue Klasse zu schaffen, die nicht die tatsächliche Fileinfo enthält, sondern nur Attribute ausgewählt:
public class myFSModInfo
{
public Type Type;
public string BaseDirectory;
public string RelativePath;
public string FullName;
public DateTime DateModified;
public DateTime DateCreated;
public myFSModInfo(FileSystemInfo dir, string basedir)
{
Type = dir.GetType();
BaseDirectory = basedir;
RelativePath = dir.FullName.Substring(basedir.Length + (basedir.Last() == '\\' ? 1 : 2));
FullName = dir.FullName;
DateModified = dir.LastWriteTime;
DateCreated = dir.CreationTime;
}
private myFSModInfo() { }
/// <summary>
/// Copies a FileInfo or DirectoryInfo object to the specified path, creating folders and overwriting if necessary.
/// </summary>
/// <param name="path"></param>
public void CopyTo(string path)
{
if (Type == typeof(FileInfo))
{
Directory.CreateDirectory(path.Substring(0, path.LastIndexOf("\\")));
File.Copy(FullName,path, true);
}
else if (Type == typeof(DirectoryInfo)) Directory.CreateDirectory(path);
}
public void Delete()
{
if (Type == typeof(FileInfo)) File.Delete(FullName);
else if (Type == typeof(DirectoryInfo)) Directory.Delete(FullName);
}
}
Ich hatte auch kein Glück dieser Serialisierung. Ich könnte die Fehler auflisten, die bei meinen verschiedenen Versuchen aufgetreten sind, aber es wäre wahrscheinlich einfacher, zuerst den besten Ansatz auszuwählen. Hier ist meine Serialisierungscode:
public void SaveLog(string savepath, string dirpath)
{
var dirf = new myFSModInfo[1][];
string[] patharr = {dirpath};
GetFSInfo(patharr, dirf);
var mySerializer = new System.Xml.Serialization.XmlSerializer(typeof(myFSModInfo[]));
var myWriter = new StreamWriter(savepath);
mySerializer.Serialize(myWriter, dirf[0]);
myWriter.Close();
/*var bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
FileStream fs = new FileStream(savepath, FileMode.Create, FileAccess.Write);
bf.Serialize(fs, dirf[0]); */
}
Denken Sie nur Eigenschaften serialisiert werden können, keine Variablen. –
Kannst du etwas konkreteres zu deinen Problemen geben? – Octopoid
haben Sie die Klasse als serialisierbar deklariert? [Serializable] – Sorceri