Config Datei erstellen

paebels

Erfahrenes Mitglied
Hallo

ich habe ein Program welches aus einer schlichten .txt Einträge ausliest um damit z.B.
das Kopieren von Dateien zu verbieten. Eine Whitelist benutzte ich für sowas. Nun kommt aber mehr dazu und ich möchte es einmal mit XML versuchen. Also müsste ich da seben genannte unterbringen und zum Beispiel noch Laufwerke auf die man zugreift.

Hat jemand ein nette todo wie man sowas sauber macht? Oder an dem eben genannten mir ein Beispiel zaubert?
MFG
Oli
 
Hallo paebels,

Ein todo gibt es meiner Meinung nicht direkt ;) Das ist je nach den zu speichernden Daten unterschiedlich.

Aber hier mal ein Beispiel für deine Situation:
XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<paebels_copytool>
  <whitelist>
    <filename>C:\...\test.txt</filename>
    <filename>C:\...\to_copy.exe</filename>
  </whitelist>
</paebels_copytool>
Oder auch einzelne Ordnerstrukturen mit mehr Dateieigenschaften sind möglich:
XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<paebels_copytool>
  <whitelist>
    <dir path="C:\Users\ComFreek\Documents\">
      <file executable="true" lastModified="10.11.2011" mime="application/octet-stream">to_copy.exe</file>
    </dir>

    <dir path="C:\Users\ComFreek\Pictures\">
      <file executable="false" lastModified="10.11.2011" mime="text/plain">test.txt</file>
    </dir>
  </whitelist>
</paebels_copytool>
 
Zuletzt bearbeitet von einem Moderator:
Hallo
kannst Du mir auch sagen wie man das mit Code dann ausliest?Z.B c++ oder c# .net Ich nutze gerad eine txt datei und lese jede zeile ein.
MFG
Oli
 
Zuletzt bearbeitet:
Hallo ich hab emich heute erst wiedre damit beschäftig und ich hba edie Idee es so zu machen.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<kopieren>
<erlaubte_dateien>
	<whitelist>
	<dateiendung>.txt</dateiendung>
	<dateiendung>.jpg</dateiendung>
	<dateendung>.log</dateendung>
	</whitelist>
</erlaubte_dateien>
</kopieren>
Idee ist das ich mit kopieren anfange und weiter zu den erlaubten Dateiendungen gehen will. Grund ich möchte Später noch eine Fehlerliste erstellen in der XML um die Fehler die auftreten an das Server Event log zu schicken. Ist das so vom Prinzip her ok? Oder völlig falsch? Muss ich gleich was ändern anders machen? Nachtrag meine Funktionen prüfen erst auf die Endung selbst und später noch mal den Dateiheader(um Datei Änderungen festzustellen) wäre es nun Sinnvoll in die XML die Codes einzubinden für die Dateiheader? Und dann wie und wo und in HEX oder Dezimal? Hoffe mich versteht noch wer ;-)MFG
Oli
 
Zuletzt bearbeitet:
So habe es so gemacht
Code:
<?xml version="1.0" encoding="UTF-8"?>
<whitelist>
	<dateiendungen  Name = ".txt" ></dateiendungen>
	<dateiendungen  Name = ".jpg"></dateiendungen>
	<dateiendungen  Name = ".log'"></dateiendungen>
</whitelist>

Ziemlich einfach gehalten und anstatt Text lese ich halt die Atribute Name aus und verarbeite diese weiter,KP ob das so ok ist es geht aber.Hier mal der auslese Code für Leute sowas machen wollen
Code:
System::Xml::XmlDocument^ config = gcnew XmlDocument();
		config->Load("res\\config\\Copy.xml");
		System::Xml::XmlElement^ root = config->DocumentElement;
		for each(XmlNode^ node in  root->ChildNodes)
		{
			this->erlaubte_dateien.push_back(marshal_as<std::string>(node->Attributes["Name"]->InnerText->ToString()));
		}

MFG

Oli
 
Zuletzt bearbeitet:
Hallo paebels,

okay du hast es schon geschafft, es mit C# auszulesen ;)

XML:
<?xml version="1.0" encoding="UTF-8"?>
<whitelist>
    <dateiendungen  Name = ".txt" ></dateiendungen>
    <dateiendungen  Name = ".jpg"></dateiendungen>
    <dateiendungen  Name = ".log'"></dateiendungen>
</whitelist>
Ein paar "stilistische" Mängel von mir:
  1. Ich würde noch ein Eltern-Element für alle Dateiendungen machen (<dateiendungen>) oder eben die vorhandenen Tags zu <dateiendung> (Singular) umbennenen.
  2. Die Dateiendung würde ich in den Tag-Inhalt schreiben und nicht als Name-Attribut. (Übrigens kannst du den schließenden Tag weglassen, wenn du den "Inhalt" nicht benutzt: <tag />).
  3. Den Punkt bei der Dateiendung würde ich auch weglassen, wobei dies aber eher Geschmackssache ist ;)

XML:
<?xml version="1.0" encoding="UTF-8"?>
<whitelist>
  <dateiendung>txt</dateiendung>
  <dateiendung>jpg</dateiendung>
  <dateiendung>log</dateiendung>
</whitelist>

Und dann wie und wo und in HEX oder Dezimal?
Da würde ich HEX tendieren, es wird ja oft auch so angegeben.
 
Zuletzt bearbeitet von einem Moderator:
Hallo kannst Du mir einmal erklären wann man nun Attribute nimmt und wann Text zwischen den Tags?
Ich komme nicht zu einer übersichlichen Struktur! Ich möchte auch Laufwerke bestimmen aus der Datei und Flags setzen wie erlauben (yes oder no) Als Beispiel finde ich aber immer nur eine Variante. Ich hab emich gerade an der Stelle völlig verrannt.
Code:
<?xml version="1.0" encoding="UTF-8"?>
<whitelist Citrix="yes" Citrix_C="no">
	<config  Endung_erlauben = ".txt"  Laufwerke = "C" ></config>
	<config  Endung_erlauben = ".doc" Laufwerke = "Z"></config>
	<config  Endung_erlauben = ".log" Laufwerke = "Wo auch immer"></config>
	<config  Endung_erlauben = ".jpg" Laufwerke = ""></config>
</whitelist>
MfG
oli

p.s. vor allem habe icvh mich wohl verrannt weil ich das auslesen noch nicht richt drauf habe.Bitte um Hilfe
 
Hallo paebels,

grob gesagt: Wenn der Inhalt des Tags den Namen des Tag wiederspiegelt, dann ist es richtig:

Dein Beispiel:
XML:
<!-- 1 --> <dateiendungen  Name = ".txt" ></dateiendungen>
<!-- 2 --> <dateiendung>txt</dateiendung>
Der Inhalt des Tags (txt) bezieht sich eindeutig auf den Namen des Tags (dateiendung).

Bei deinem XML jetzt, würde ich anmerken, dass der Tag-Name gar nicht den Inhalt oder die Attribute des Tags irgendwie benennt - es heißt einfach nur config.
So würde ich es vorschlagen:
XML:
<dateiendung laufwerke="C;D;">txt</dateiendung>
<dateiendung laufwerke="F;Z;">doc</dateiendung>

p.s. vor allem habe icvh mich wohl verrannt weil ich das auslesen noch nicht richt drauf habe.Bitte um Hilfe
Mit C# kenne ich mich leider nicht so aus. Aber ich könnte dir ein Beispiel in C++ schreiben.
 
Zuletzt bearbeitet von einem Moderator:
Danke für die Prompte Antwort ich mach Visual C++ nicht C#
mein Plan war jetzt so :
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!-- New document created with EditiX at Mon Nov 28 15:43:26 CET 2011 -->

<KONFIGURATION Cirtix="" Citrix_C="">
<ERLAUBTE_DATEIEN>
	<DATEIEINDUNG>.txt</DATEIEINDUNG>
	<DATEIEINDUNG>.log</DATEIEINDUNG>
	<DATEIEINDUNG>.log</DATEIEINDUNG>
</ERLAUBTE_DATEIEN>
<BEREITGESTELLTE_LAUFWERKE>
	<LAUFWERK>C</LAUFWERK>
	<LAUFWERK>X</LAUFWERK>
	<LAUFWERK>Z</LAUFWERK>
</BEREITGESTELLTE_LAUFWERKE>
</KONFIGURATION>

Konfiguration als ober Tag da ich damit ja mein Program konfiguriere. Danach das was ich erlauben will also gewisse Dateien die ich erstmal mal nur auf diese Endung prüfe, später auch den Header lese zur Sicherheit. Und dann muss ich noch Laufwerke einbinden die ich wie oben zu sehen aus der config haben möchte. Die 2 Attribute habe ich gesetzt um gewisse Funktionen gleich zu unterbinden. Nur wie lese ich das wirklich sauber aus? Und ist der Ansatz so ok? Liest man sowas als Objekt ein in eine Arraylist? Oh man ich habe soviele Fargen, weil ich das früher immer mit einer txt Datei gemach habe und da einfach readline()
MfG

Oli
 
Zuletzt bearbeitet:
Ich glaube du machst dir zu viele Gedanken um deine Konfigurations-Datei ;)
Klar, Planung ist sehr gut, aber wenn dann die Planung die eigentliche Entwicklung abhält, macht man meiner Meinung nach etwas falsch.

Gut, nun wie liest man das ein?

Du könntest zum Beispiel TinyXML++ nutzen, welches wirklich sehr leicht und schnell aufzusetzen geht (max. 10 Minuten)!
 

Neue Beiträge

Zurück