Laden...
S
sublime myCSharp.de - Member
IT-Azubi Anwendungsentwicklung Braunschweig Dabei seit 06.10.2005 34 Beiträge
Benutzerbeschreibung

Forenbeiträge von sublime Ingesamt 34 Beiträge

27.04.2006 - 13:45 Uhr

Geladen hab ich so:


XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(FileName);
XmlElement XmlRoot = xmldoc.DocumentElement;
27.04.2006 - 13:39 Uhr

Hi,

also ich habe beispielsweise folgenden Inhalt einer *.xml Datei:


<?xml version="1.0" ?> 
- <Verzeichnis Name="C:\Daten">
- <Datei>
  <Name>auto.reg</Name> 
  <Erstellungsdatum>07.06.2005 15:48:26</Erstellungsdatum> 
  <Version /> 
  <Bytes>240</Bytes> 
  </Datei>
- <Datei>
  <Name>empty.xml</Name> 
  <Erstellungsdatum>25.08.2005 13:30:17</Erstellungsdatum> 
  <Version /> 
  <Bytes>41</Bytes> 
  </Datei>
- <Pfad>
  <Name>\PackageWizard</Name> 
- <Datei>
  <Name>Diff.exe</Name> 
  <Erstellungsdatum>15.08.2003 10:51:00</Erstellungsdatum> 
  <Version>9.5</Version> 
  <Bytes>172032</Bytes> 
  </Datei>
- <Datei>
  <Name>Diff.inf</Name> 
  <Erstellungsdatum>26.11.2003 08:52:00</Erstellungsdatum> 
  <Version /> 
  <Bytes>11765</Bytes> 
  </Datei>
- <Datei>
  <Name>DiffConv.exe</Name> 
  <Erstellungsdatum>13.04.2002 10:00:00</Erstellungsdatum> 
  <Version>9.0</Version> 
  <Bytes>135168</Bytes> 
  </Datei>

Nun möchte ich erstmal "C:\Daten" auslesen um dieses in ein Objekt zu speichern als Oberordner.

Anschließend sollen auch die Dateien und Ordner ausgelesen und in die Struktur des Objektes eingefügt werden.

Ich habe schon alles ausprobiert "C:\Daten" auszulesen aber ich komm nicht ran, wieso auch immer. Hat jemand ne Ahnung mit welchem Befehl ich genau an diesen Inhalt gelange?

Beim Auslesen der Ordner und Dateien besteht zudem das Problem, das er nicht zwischen Ordnern und Dateien unterscheidet und ich deshalb nicht in die Unterordner gelange. Das wäre das zweite Problem bei welchem ich Hilfe benötige.

Falls ihr noch irgendwelche Zusatzinfos benötigt einfach schreiben...

17.03.2006 - 08:15 Uhr

Original von der Marcel
Hi sublime!

ist nicht so schlimm! 🙂

Was natürlich für Verwirrung sorgt, ist die Tatsache, dass man mit File.GetLastWriteTime auch Verzeichnis-Attribute auslesen kann!

der Marcel

Ja bin mir nicht sicher was er genau ausliest, weil das "erstellt" Datum des Ordners kann wiederum auch nicht sein. Auf jedenfall nicht das Richtige. 😉

17.03.2006 - 08:14 Uhr

Original von talla
Ja, aber die Tatsache das die Zeiten keine verlässliche Angabe über die Version oder welche Datei älter/jünger ist machen - ist dir trotzdem klar ja?

Mhmm also so wies angedacht war funktionierts jetzt eigentlich. Wenns irgendwann mal nen Fehler gibt bin ich bestimmt auch schon in der nächsten Abteilung... 😁

16.03.2006 - 16:05 Uhr

Wie Marcel vorhin sagte muss ich schon auf die Datei zugreifen nicht auf den Ordner. Ich bin die ganze Zeit davon ausgegangen das in meiner Variable "Folder" der komplette aktuelle Pfad läge. Dem war aber nicht so ich habe also jedes mal das Datum des Ordners ausgelesen. Auch beim debuggen hab ich darauf überhaupt nicht geachtet weil ich so auf GetLastWriteTime fokussiert war. Ich ärgere mich so über mich selbst...

sDatum = myFile.sPfad + @"\" + myFile.sName;
myFile.sDate = File.GetLastWriteTime(sDatum);

So funktionierts jetzt einwandfrei wie es angedacht war. 🙁 ziemlich peinlich

16.03.2006 - 15:28 Uhr

Hat sich erledigt / geklärt ich hab einfach nur den dümmsten Anfängerfehler gemacht der mich einfällt. Hab mich viel zu sehr vom Wesentlichen ablenken lassen. Tut mir echt leid das ich euch so aufgerieben habe... X(

16.03.2006 - 13:54 Uhr

Also die Version wird ausgelesen über:

FileVersionInfo sFileVersion = FileVersionInfo.GetVersionInfo(aFile[iStart]);
myFile.sVersion = sFileVersion.ProductVersion;

Richtig soll sozusagen absichern falls mal keine Versionsangabe vorhanden ist. Schlecht wenns nicht geht... 😁

16.03.2006 - 13:40 Uhr

Original von Fil
Nachtrag (Du warst schneller):
Du hast doch gesagt, Du hättest irgendwie eine "Version"-Angabe ... ?

Jou aber die bleibt leer sobald die Datei keine Versionsangabe beinhaltet. 😁

16.03.2006 - 13:22 Uhr

Aber wir soll ich dann Daten Vergleichen welche ohne jegliche Version sind?

16.03.2006 - 12:55 Uhr

Original von Fil

Original von der Marcel

@Fil: du hast dabei auch nur eine lokale Kopie in deinem Dateisystem erstellt. Deswegen wurden die Zeiten auf den y-ten März geändert, da beim Kopieren voll reingeschrieben wird. Dein Dateisystem sieht das so: Erst war die Datei nicht da: Anlegen --> Erstellungsdatum y. März. Datei ist 0kB groß --> es wird der Inhalt beim Kopieren reingeschrieben --> Änderung des Datums "Geändert am".

der Marcel

MIR ist das schon klar. Wollte mich jetzt nur nicht geschwollen ausdrücken. Hab schließlich auch schon "Betriebssysteme" gehört (und bestanden).
Ich wollte nur drauf aufmerksam machen, daß je nachdem was seine Applikation sonst noch so mit der Datei macht dadurch evtl "seltsame" Phänomene auftauchen können, was die Datumsangaben betrifft.

@sublime: willst Du denn einfach in Deinem Programm Änderungen an bestimmten Dateien verfolgen, die in der zwischenzeit aber am gleichen Platz bleiben ? Dann würd ich sagen, daß LastWriteTime Dein Favourit sein sollte. Wenn sich zwischendurch durch was auch immer für Dich bzw Dein Programm nicht nachvollziehbare Speicherortänderungen ergeben, dann musst Du Dir was anderes einfallen lassen. Dann kannst Du Dich nämlich nicht mehr drauf verlassen, daß das "Zuletzt geändert am" auch tatsächlich identisch gleich mit "Inhalt zuletzt geändert am" ist.

Also es handelt sich bei dem ganzen um ein Programm welches alle Dateien und Unterordner eines Ordners ausliest und in eine XML Struktur schreibt. Bei Dateien werden zusätzlich die Attribute "Erstellungsdatum", "Version" und "Größe" ausgelesen und geschrieben.
Nun soll ein Vergleich der eingelesenen Dateien mit gleichen Dateien auf einem anderen System durchgeführt werden um zu sehen ob neue Versionen vorliegen. Im Endeffekt sollen dadurch Skripte aktualisiert werden.
Es gibt insgesamt 4 Status:

  • Datei nicht vorhanden = 0
  • Datei (auf dem System) veraltet = 1
  • Datei aktuell (Werte "Datum" und "Version" identisch) = 2
  • Datei (auf dem System) aktueller als in *.xml = 3
16.03.2006 - 11:57 Uhr

Also ich hab das jetzt mal für eine Testdatei durchgeführt das sieht dann folgendermaßen aus:

File.GetLastWriteTime(myFile.sPfad): (Zeit zu welcher ich den Dateinamen zuletzt änderte)

<Erstellungsdatum>16.03.2006 11:39:44</Erstellungsdatum>

File.GetCreationTime(myFile.sPfad): (Zeit an welcher ich die Datei in einen neuen Ordner kopierte)

<Erstellungsdatum>07.03.2006 09:18:53</Erstellungsdatum>

File.GetLastAccessTime(myFile.sPfad): (Zeit als ich mit dem Auslese - Programm drauf zugriff)

<Erstellungsdatum>16.03.2006 11:53:27</Erstellungsdatum>

Als Vergleich habe ich die Windowsdateiinformationsansicht der *.jpeg angehängt.

16.03.2006 - 11:35 Uhr

Original von der Marcel
hi!

ich würde sagen, File.GetLastWriteTime(fileName) ist der Zugriff auf "Geändert am"? was hat er denn sonst zu bedeuten? Windows zeigt 3 Zeiten an, und auf 3 Zeiten hast du über file Zugriff 😉

PS: Als Argument steht kein Verzeichnis sondern ein Dateiname drin. Die Directory-Klasse stellt das Äquivaltent für Verzeichnisse dar.

der Marcel

Ne funktioniert leider nicht. Als Argument muss man schon ein Verzeichnis bzw. den kompletten Pfad mitliefern. Der gibt dann jedoch das Datum aus, zu welchem der Dateiname zuletzte verändert wurde.

16.03.2006 - 11:25 Uhr

Moin,

war gerade dabei verschiedene Daten aus einer Datei auszulesen. Jetzt würde ich gerne das Datum unter "geändert am" auslesen.

Mit:

File.GetLastWriteTime(Folder);
File.GetCreationTime(Folder); oder
File.GetLastAccessTime(Folder);

funktioniert das leider nicht und eine weitere Option bietet mir File. nicht. Hat jemand von euch eine Idee worüber ich auf das Datum unter "geändert am" zugreifen kann?

Grüße sublime

07.03.2006 - 09:21 Uhr

Naja bin ja in der Ausbildung und soll das dementsprechend selber programmieren. 🙂 Zuvor hatte ich ein Programm geschrieben das nach angegebenem Pfad alle vorhandenen Unterordner und Dateien mit Name, Erstellungsdatum und Version in eine XML schreibt. Jetzt sollen 2 so erstellte XML Dateien verglichen werden.

Hier mal ein Beispiel wie so ne Datei aussieht:

<?xml version="1.0" ?>

  • <Verzeichnis Name="C:\test">
  • <Pfad>
    <Name>C:\test</Name>
  • <Datei>
    <Name>acledit.dll</Name>
    <Erstellungsdatum>07.03.2006 09:18:53</Erstellungsdatum>
    <Version>5.1.2600.0</Version>
    </Datei>
  • <Datei>
    <Name>aclui.dll</Name>
    <Erstellungsdatum>07.03.2006 09:18:53</Erstellungsdatum>
    <Version>5.1.2600.0</Version>
    </Datei>
  • <Datei>
    <Name>activeds.dll</Name>
    <Erstellungsdatum>07.03.2006 09:18:53</Erstellungsdatum>
    <Version>5.1.2600.0</Version>
    </Datei>
    </Pfad>
    </Verzeichnis>

Das Programm zum vergleichen soll natürlich wieder in C# geschrieben werden, deswegen hatte ich den Beitrag auch im C# Forum gemacht.

07.03.2006 - 09:09 Uhr

Moin,

diesmal suche ich eine Möglichkeit in zwei XML Dateien auf ihre Unterschiede zu untersuchen. Also ich habe zwei fast identische XML Dateien mit minimalen Unterschieden und möchte das diese angezeigt oder ersetzt werden.

Gibts da ne simple Möglichkeit das umzusetzen?

31.01.2006 - 13:16 Uhr

Habs mit beiden Antworten versucht und bin dann so ganz schnell zum Ziel gekommen:

myFolderOvw.sPfad = Path.GetDirectoryName(Folder);

Vielen Dank euch allen. Bin jetzt ab morgen erstmal wieder in der Berufsschule denke nicht das ich da im nächsten Monat große C# Fragen haben werde, aber wenn doch weiß ich ja wo ich jederzeit Hilfe finde. 🙂

31.01.2006 - 11:21 Uhr

Nach langen Erklärungen und immer wieder Nachfragen denke ich es einigermaßen verstanden zu haben. Zumindest was diese spezielle Aufgabe betrifft. =)

Jetzt hätte ich mal wieder ne andere Frage:

Bei Pfad:

C:\Laden

habe ich den Unterordner "Laden". Dadurch wird mir jedoch als Pfad

C:\Laden\Laden

ausgegeben. Da das zweite aber der Unterordner ist möchte ich diesen nicht mit ausgeben haben. Stattdessen möchte ich eine Ausgabe wie oben:

Pfad: C:\Laden
Ordner: Laden

Habe jetzt schon ein bisschen hier und im Internet gesucht und bin anfangs auf den "split" - Befehl gestoßen. Damit komme ich aber nach ettlichem Probieren nur auf "C:&quot;. Jetzt habe ich als Tip ".substring" erhalten, allerdings verstehe ich nicht wie sich dieser allgemein auf jede unterschiedliche Dateilänge anwenden lassen soll!?

30.01.2006 - 11:12 Uhr

Hiho,

nachdem ich mein letzte Aufgabe mit der Auflistung der Dateistruktur gelöst habe, stellt sich mir nun folgende Aufgabe:

Ich soll ein Objekt erstellen, welches folgende Attribute enthält:

String:

  • Dateinamen
  • Verzeichnis
  • Dateiversion

Date (mit Uhrzeit):

  • Erstellungsdatum der Datei

Jetzt habe ich mir einiges über Objekte und Klassen in C# durchgelesen, dadurch weiß ich aber immer noch nicht wie das ganze letztendlich in der Syntax aussieht?

Kann mir das vielleicht jemand ein wenig näher bringen?

25.01.2006 - 10:12 Uhr

Moin,

also ich schreibe derzeit ein Programm, welches im Endeffekt aus einem zuvor ausgewählten Ordner alle vorhandnen Verzeichnisse, Unterordner und Dateien mit Namen und Struktur in eine Textdatei schreiben soll.
Wie man den Ordner ausählt und das Ziel bestimmt ist kein Problem und auch das schreiben in eine Textdatei sollte kein Problem darstellen.
Jedoch kenne ich keine Möglichkeit die Struktur auszulesen.

Das ganze soll ein normales Windows Programm keine Konsolen-Applikation werden. Habt ihr da vielleicht ne Idee?

20.01.2006 - 08:42 Uhr

Ah, jetzt hab ich den Fehler raus der da noch war. =) Ok funktioniert thx. Bin ja nur Azubi ich darf noch Fehler machen hehe

17.01.2006 - 10:28 Uhr

Also wie gesagt das sind die Lösungen die auf jedenfall funktionieren (eben von mir getestet =)):

von dezimal zu hexadezimal:

								iLine = Convert.ToInt32(iLine).ToString("X");

von dezimal zu binär:

								uint iAnz = Convert.ToUInt32(iLine);
string iErgebnis = "";
uint iRest;
while (iAnz > 0) 
	{							
    iRest = iAnz % 2;
	iErgebnis = iRest.ToString() + iErgebnis;
	iAnz = iAnz / 2; 
	}
iLine = iErgebnis;

Von hexadezimal zu dezimal:

								uiHex = Convert.ToUInt32(iLine, 16);
iLine = uiHex.ToString();

von binär zu dezimal:

								uiBin = Convert.ToUInt32(iLine, 2);
iLine = uiBin.ToString();

17.01.2006 - 10:14 Uhr

So also mit:

								uiHex = Convert.ToUInt32(iLine, 16);
iLine = uiHex.ToString();

Gehts von hexadezimal zurück zu dezimal und folglich mit:

								uiBin = Convert.ToUInt32(iLine, 2);
iLine = uiBin.ToString();

von binär zu dezimal und von Dezimal aus kommt man ja wieder überall hin. =)

17.01.2006 - 10:03 Uhr

Original von frisch
Convert.ToString(value, 16); funktioniert eigentlich. Da musst du was falsch gemacht haben.

Gibt es eigentlich auch eine Möglichkeit, von einem Format zurück auf die Basis zu kommen?

Ich bekomm da "C:\Laden\Laden\Class1.cs(86): Argument '2': cannot convert from 'int' to 'System.IFormatProvider'".

Die Rückrechenmöglichkeit ist meine Nächste Aufgabe im Endeffekt möchte ich von Dezimal, Hexadezimal und Binär in Dezimal, Hexadezimal und Binär kommen.

17.01.2006 - 08:48 Uhr

Original von Programmierhans
Wieso einfach wenn es auch kompliziert geht 😁

Convert.ToString(DeinWert,2) --> ergibt binär
Convert.ToString(DeinWert,16) --> ergibt hex

Mhmm hat leider nicht funktioniert. Gab nen Format Error. Habs jetzt folgendermaßen gelöst:

Dezimal --> Binär:

								uint iAnz = Convert.ToUInt32(iLine);
string iErgebnis = "";
uint iRest;
while (iAnz > 0) 
	{							
    iRest = iAnz % 2;
	iErgebnis = iRest.ToString() + iErgebnis;
	iAnz = iAnz / 2; 
	}
iLine = iErgebnis;

Dezimal --> Hexadezimal:

								iLine = Convert.ToInt32(iLine).ToString("X");
13.01.2006 - 12:03 Uhr

Moin,

es geht sich diesmal um folgendes =) :

Ich habe eine Textdatei mit verschiedenen Dezimalzahlenwerten. Diese wird von einem Programm eingelesen und je nach übergebenem Parameter sollen die Zahlen in das binäre oder hexadezimale Zahlensystem umgewandelt werden. Dazu habe ich folgenden Case:

					while ((line = sr.ReadLine()) != null) 
					{
						switch (iParam)
						{
							case "B":
								break;

							case "H":
								break;

							case "D":
								break;

							default:
								break;
							
						}
						sw.WriteLine(line);
					}

Jetzt fehlen mir jedoch jeweils die Befehle um die entsprechende Umwandlung vorzunehmen. Gibt es da eine Funktion für in C# die mein Problem löst?

Vielen Dank schonmal für eure Hilfe.

19.12.2005 - 09:29 Uhr

Hat sich geklärt... 😉

15.12.2005 - 12:37 Uhr

Original von svenson
Entweder du schreibst die Daten direkt in ein File (StreamWriter) oder du gehst den üblichen Weg von außen, d.h. du lenkst die Ausgabe des Programmes um

zufall.exe 123 >meinFile.txt

Konsolenprogramme schreiben üblichweise immer auf die Konsole. Das Schreiben in ein File macht man dann vom Batch aus, indem man die Ausgabe umlenkt (>). Letzteres hat den Vorteil, dass du im Programm nicht zwei Varianten implementieren musst.

Mhmm hab aber keine Ahnung wie das mitm Batch funktioniert, werd ichs wohl mitm StreamWriter versuchen...

15.12.2005 - 11:17 Uhr

Hab das mit dem abfangen von falschen Zeichen oder Buchstaben erstmal nach hinten geschoben. 😉 Ansonsten klappt inzwischen alles soweit.

Eine weitere Frage:

Ich möchte die vom Programm ausgegebenen Werte nicht in der Konsole anzeigen lassen, sondern stattdessen in einem Textfile speichern. Das soll dann mit Parametern ungefähr so aussehen:

zufall.exe -save test123

Dadurch oder so ähnlich soll er dann die Daten in einer test123.txt ablegen. Sowas funktioniert doch oder?

14.12.2005 - 13:16 Uhr

Ah natürlich hätte ich auch selbst drauf kommen können, aber dazu hab ich ja euch 😉 . Ja also das was du ansprichst ist euch gleich das Nächste womit ich mich beschäftigen muss/will. Was passiert wenn jemand zufall.exe ABC oder zufall.exe help eingibt. ich bin gespannt ob ich das hinkriege. 😁

14.12.2005 - 12:52 Uhr

Hoi,

Ich habe eine zufall.exe . Diese soll normalerweise mit einem Startparameter also beispielsweise (zufall.exe 5) gestartet werden. Wenn dieser Startparameter aber nicht gegeben ist, soll er vom Benutzer erfragt werden. Deshalb hatte ich vorerst:


int iAnzahl;
	if (Convert.ToInt32(args[0]) != 0)
		{
		iAnzahl = Convert.ToInt32(args[0]);
		}
		else
		{
		tOut.Write("Bitte geben sie den Parameter ein: ");
        iAnzahl = Convert.ToInt32(tIn.ReadLine());
		}

Aber das funktioniert so nicht, kriege dann immer folgende Fehlermeldung:

An unhandled exception of type 'System.IndexOutOfRangeException' occurred in Zufall.exe
Additional information: Index was outside the bounds of the array.

Jemand eine Idee was nicht funktioniert bzw. ich ändern muss?

12.12.2005 - 09:21 Uhr

Moin,

habe mal wieder ein neues Problem. Folgendes:

Ich habe eine Oberfläche bestehend aus blauen und weißen Quadraten, welches in einem Array hinterlegt wird. Blau wird im Array als 1, weiß als 0 gespeichert. Nun muss ich dieses Array als *.txt Dokument speichern. Bisher auch kein Problem, habe nun also einen "speichern" Button. Beim Klick werden die Farben in Form von Ziffern in die Textdatei gespeichert.

Nun benötige ich jedoch auch einen "laden" Button. Beim Klick sollen die Ziffern wieder zurück ins Array geschrieben werden und daraus soll wiederum die Oberfläche aktualisiert werden.

Wie jedoch schreibe ich nur jeweils genau eine Ziffer an die richtige Position im Array, so dass am Ende alles wieder ist wie beim Speichern? Hat da jemand eine Idee? Falls ihr noch weitere Infos benötigt stehe ich jederzeit zur Verfügung.

Danke schonmal im Vorraus.

01.11.2005 - 09:21 Uhr

Hallo herbivore,

sorry habs nochmal nachgeguckt und du hattst schon recht, dass der Tipp in deinem Post derselbe war wie von Programmierhans, habs anfangs auch damit probiert, aber das dann noch mit Teilen aus der MSDN vermischt und dadurch gings net. Stand einfach ein wenig aufm Schlauch.

31.10.2005 - 15:49 Uhr

Auch wenns vielleicht nicht für mich gedacht war, hat mir super weitergeholfen Programmierhans. Vielen Dank! 🙂

31.10.2005 - 14:36 Uhr

Hallo,

habe ein ähnliches Problem, benötige auch eine "zeitliche Pause", in welcher jedoch die für den Benutzer sichtbare Oberfläche aktualisiert werden soll.

Mich bringen keine der bisher gefundenen Möglichkeiten weiter, allerdings bin ich auch noch blutiger Anfänger, vielleicht kann mir hier jemand noch einen Tipp geben?

Danke schonmal im Voraus. =)