Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von maxE
Thema: Rekrusives Ordner kopieren?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

SHFileOperation per PInvoke könnte man nehmen, dafür verspielt man sich aber jede Form von Portabilität.

Thema: Rekrusives Ordner kopieren?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hab mal ein kleines Prog geschrieben, dass die Zeilen von *.cs Quellcodedateien zählt:
Es sollte ganz gut demonstrieren, wie man Verzeichnisste rekursiv durchsucht.
Hier der Auszug:


		private void bCount_Click(object sender, System.EventArgs e)
		{
			int lines = 0;
			int files = 0;

			CountLOC( new DirectoryInfo(tbFolder.Text), ref lines, ref files );

			tbLOC.Text = lines.ToString();
			tbFiles.Text = files.ToString();
		}

		private void bBrowse_Click(object sender, System.EventArgs e)
		{
			if( folderBrowserDialog.ShowDialog() == DialogResult.OK )
			{
				tbFolder.Text = folderBrowserDialog.SelectedPath;
			}
		}

		private void CountLOC( DirectoryInfo di, ref int lines, ref int files )
		{
			FileInfo[] fs = di.GetFiles( "*.cs" );
			foreach( FileInfo f in fs )
			{
				CountLOC( f, ref lines );
				files++;
			}
	
			DirectoryInfo[] dirs = di.GetDirectories();
			foreach( DirectoryInfo d in dirs )
			{
				CountLOC( d, ref lines, ref files );
			}
		}

		private void CountLOC( FileInfo fi, ref int lines )
		{
			StreamReader sr = fi.OpenText();
			string l;

			while (sr.Peek() ≥ 0)
			{
				sr.ReadLine();
				lines++;
			}

			sr.Close();
		} 

Du müsstest dann nur noch die CountLOC Methode, welche die Zeilen zählt, durch eine Kopierrountine ersetzen.

Thema: Per C# Zip-Dateien packen und entpacken
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Oder .NET Framework 2.0 benutzen
Da ist Deflate und GZip mit drinn.

Thema: Module
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Module sind nichts anderes als Assemblies ohne Manifest. Sie sind von ihrer Funktion her vergleichbar mit statisch linkbaren Bibliotheken (.lib), wie man sie aus C++ kennt.

Thema: Beobacher nicht mit Events?
Am im Forum: Rund um die Programmierung

Die Events sind ja praktisch eine Integration des Observer(Listener)-Patterns in C#.
Du kannst natürlich Observer benutzen, aber Events sind natürlich typischer für C#.

Thema: Rendering Struktur
Am im Forum: Grafik und Sound

Der Hauptsinn in diesem Pattern liegt darin, deine Daten, also Sprites und Co., von deinem eigentlichem Rendering zu entkoppeln. Von IModelVisitor kann man eigene Renderobjekte erzeugen. Das bedeutet für dich, dass dein Rendeing unahängig von der Grafik-API geschieht. Du könntest einen OpenGL, Direct3D, GDI-Renderer oder sonstwas implementieren. Das Visitor Pattern hat natürlich auch ein paar Nachteile: Das Pattern ist recht aufwändig zu verwalten, wenn man es mal mit Multimethoden vergleicht:

http://nice.sourceforge.net/visitor.html

Dafür erlaubt es eine recht gute Trennung von Daten und Operationen (in dem Fall Rendering) auf diese.

Eine ganz gute Übersicht für Pattern gibt's hier:

http://www.dofactory.com/Patterns/Patterns.aspx

Für Pattern allgemein, ist wohl das GOF-Book zu empfehlen:

http://c2.com/cgi/wiki?DesignPatternsBook

Thema: Stream ohne Datei
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

DlllImport, Kernel32.dll, oder?

Thema: Stream ohne Datei
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Einen Treiber muss man nicht gleich schreiben, aber mit der Windows-API geht das.
Mit dem CreateFile Syscall kann man auch Datenträger im RAW-Mode öffnen.
Als symbolischen Dateinamen muss man "\\.\PhysicalDriveX" nehmen.

http://support.microsoft.com/?scid=kb;en-us;150101
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B100027

Sei aber vorsichtig damit. Schreibst du irgend was falsches in die Sektoren, dann kannst du dein Dateisystem ins Nirvana schicken.

Thema: SharpDevelop
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Brauchst du nicht. Wenn du eine Win-Anwendung auswählst, dann wird dein Code nur mit einem anderem Compilerschalter compiliert, als bei der Konsolenanwendung.
Die Schalter kann man in den Projekteinstellungen ändern.

Thema: James Gosling äußert sich zur Sicherheit von .net
Am im Forum: Smalltalk

FUD (=Fear, Uncertainty & Doubt)

Thema: C++/cli?
Am im Forum: Smalltalk

Auf der IL Ebene glaube ich nicht, dass sich C++/CLI viel von C# unterscheidet, wenn es um Geschwindigkeit geht, denn die Transformation von C# nach IL bzw. C++/CLI nach IL, lässt auf dieser Stufe nicht so wahnsinnig viel Raum für Optimierungen.
Formal gesehen, ist die Übersetzung einer prozeduralen Programmiersprache in eine stackbasierende Sprache recht starr.

Mich würde schon interessieren, was der C++/CLI Compiler für Code erzeut, dass dieser 20-25 Prozent mehr Geschwindigkeit erreichen soll. Ein direkter Vergleich von IL Code, wäre hier wohl ganz sinnvoll.

Wenn es um die Ausführung geht, entscheidet vor allem der JIT, wie der IL Code letztlich wirklich für den Prozessor optimiert wird, weniger die Compilerebene.

20-25% sind für mich nur im Zusammenhang mit nativem x86-Code nachvollziehbar.

Thema: Pflichtenheft
Am im Forum: Smalltalk

Ein LaTeX-Package hab ich nicht - wüsste da leider auch keins
LaTeX sieht natürlich professioneller aus - speziell für solche Dokumente - als MS-Word.
Ein /documentclass{report} oder article mit Inhaltsverzeichnis sollte gehen
Es gibt zwar eine offizielle Norm für Pflichtenhefte, aber ich glaube nicht das da eine spezielle Formatierung mit vorgesehen ist.

Thema: Pflichtenheft
Am im Forum: Smalltalk

Hier mal ein Muster für ein Pflichtenheft:

http://www.informatik.uni-mannheim.de/pi4/lectures/ss2002/pm/dokumente/vorlagen/PflichtenheftCluedoViewerV0.1.pdf

Eine Kurzbeschreibung auf Wikipedia:

http://de.wikipedia.org/wiki/Pflichtenheft

Thema: Zugriff auf PDF-Datei << welches Tool?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wie die anderen schon sagen, ist das einlesen von PDFs, editieren und zurückschreiben nicht ganz so einfach, da PDF Dateien inzwischen ziemlich komplex geworden sind. Wenn du allerdings immer noch Lust hast, derartiges zu programmieren, hier die Spezifikation des Dateiformates: http://www.wotsit.org/download.asp?f=pdfspec
Viel Spaß

Zum erstellen von PDFs ist z.B. Report.NET ganz gut:
http://report.sourceforge.net/

Thema: Userdaten permanent sichern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hier mal ein Beispiel, wie man das machen könnte:
Über den Konstruktor wird die ganze Sache eingelesen.
Man kann den Namen der Konfigurationsdatei angeben und ob die Einstellungen global für alle Benuzer zugänglich sind oder nur für den angemeldeten Nutzer.
Außerdem kann man durch die Konfiguration mit foreach enumerieren.

Ach ja: Da hier immer wieder von einer Komponentensammlung die Rede ist, könnt ihr von mir aus den Code gerne übernehmen und erweitern (Arrays, weiteren Datentypen).

@christopf.k: für komplexere Datenstrukturen, solltest du vielleicht den Serialisierungsmechanismus von .NET nutzen. Wo und wie du deine Konfigurationsdaten abspeicherst, kannst du ja aus dem Quellcode entnehmen.

Thema: Userdaten permanent sichern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Jo, die Registrierung sollte man nach Möglichkeit nicht mehr benutzen. Der Anwendungsdatenordner sollte deine erste Wahl sein, um Konfigurationen zu speichern. (Kann leicht über die Environment- oder Application-Klasse ermittelt werden.)
Ich hab mir dafür eine kleine universelle Klasse geschrieben, die Konfigurationen im XML-Format speichert bzw. liest. Wenn du willst, poste ich sie hier mal rein.

Thema: Auto-Update via Internet/Netzwerk
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Es gibt auch auf Sourceforge ein AutoUpdater für .Net:
http://csautoupdater.sourceforge.net/
Nutzt XML für die Versionierung und komprimiert die Pakete gleich mit.

Thema: CPU Speed & CPU Temperatur herausfinden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

@LordK:

Da das Programm auf dem .NET Framework basiert, könntest du die Exe mal durch den Reflecor jagen (siehe Download Datenbank).
Damit sollte es recht einfach sein, heraus zu bekommen wie das Auslesen der Temperatur funktioniert 8)

Thema: dll in exe einbinden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Dieses Tool von Microsoft Research sollte euch helfen:

http://research.microsoft.com/~mbarnett/ilmerge.aspx

Es kann mehrere Assemblies zu einer Assembly zusammenführen.

Thema: Textur maping-Problem
Am im Forum: Grafik und Sound

Es ist hier vielleicht auch sinnvoll eine Kugel manuell zu erzeugen, da Exporter und 3D Modeller mit so was nicht immer klar kommen.
Der Code ist zwar noch aus meiner C++ Zeit und nutzt OpenGL, sollte aber gut auf D3D portierbar sein:


	unsigned numRings = 30, numSegments = 40;
	float alpha, alpha2 , beta, x, xi, y, z, x2, y2 ,u,u2,v,v2;
	float radius = 200;

	glBegin( GL_TRIANGLE_STRIP );
	
	for( unsigned rings = 0; rings < numRings; rings++ )
	{
		alpha = 3.141f / (float)numRings * (float)rings;
		x = sin( alpha );
		y = cos( alpha );

		alpha2 = 3.141f / (float)numRings * (float)(rings+1);
		x2 = sin( alpha2 );
		y2 = cos( alpha2 );

		v = 1.0f / (float)numRings * (float)(rings);
		v2 = 1.0f / (float)numRings * (float)(rings+1);
		
		for( unsigned segments = 0; segments < numSegments+1; segments++ )
		{
			beta = ( 2 * 3.141 ) / (float)numSegments * (float)segments;

			u = 1.0f / (float)numSegments * (float)(segments);

			xi = x2 * cos( beta );
			z = x2 * sin( beta );

			glTexCoord2f( u, v2 );
			glNormal3f( xi, y2, z );
			glVertex3f( xi * radius, y2 * radius, z * radius  );

			xi = x * cos( beta );
			z = x * sin( beta );

			glTexCoord2f( u, v );
			glNormal3f( xi, y, z );
			glVertex3f( xi * radius, y * radius, z * radius );
		}
	}
	glEnd();

Thema: Textur maping-Problem
Am im Forum: Grafik und Sound

Das ist genau das gleiche in grün
Die Textur wird einmal um die Kugel gelegt. Das Ende der Textur wird dort wieder and den Anfang der Textur angeschlossen. Es kommt zu Verzerrungen, da sich Dreiecke an dieser Stelle die Texturkoordinaten teilen.
Ist ein Problem am Exporter, der das 3D Modeller Mapping nicht Korrekt überträgt. Normalerweise müssten die Vertices an dieser "Naht" doppelt (mit jeweils korrekter Texturkoordinate) gespeichert werden.

Thema: Textur maping-Problem
Am im Forum: Grafik und Sound

Die Texturprojektionen von Cinema kann Direct3D nicht direkt. Zwar unterstütz D3D sphärische Maps und Cubemaps, diese sind aber mehr für Spiegeleffekte gedacht. Auch 3D Texturen sind für eine einfache Wand ungeeignet. Du könntest zwar Texturen auch projezieren, hast dann aber immernoch das Problem, dass sich mehrere Dreiecke einen Vertex teilen (und damit auch die Texturkoordinaten).
Es wird dir nichts anders übrig bleiben, als zwei Vertices pro Quaderecke zu speichern -Die Geometrie also in Einzelwände zu splitten-.

Thema: Textur maping-Problem
Am im Forum: Grafik und Sound

Das Problem kenne ich. Es liegt am Exporter. Was nimmst du? Maya oder 3DS?
Die Turmmauer besteht ja aus einem einzelnem Quader. Die Eckvertices dieses Objekes werden von mehreren Dreiecken geteilt. Damit werden auch die Texturkoordinaten von mehreren Dreiecken benutzt. Versuche die Eckwände mit voneinander unabhängigen Rechtecken zu modellieren, dann sollte es gehen.
Die Zinnen sehen ja schon ganz gut aus

Thema: Datei Komprimierung.
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
Ist das Sinnvoll das in ein ZIP zu packen?
Kann man das net irgendwie anders speichern?
Kommt immer auf den Verwendungszweck an. #ZipLib unterstützt nicht nur Zip-Dateien, sondern kann auch mit GZip und BZip2 Streams umgehen.
Zitat
zB. 3D Models, oder auch Bilder, haben so Komische zeichen, hängt das net damit irgendwie zusammen?
Oder ist das also auch sozusagen "Gepackt"
Ich versteh auch nicht so richtig was du meinst. Ich verstehe unter Packen einen Vorgang der Redundanzen aus einem Datenstrom entfernt. Es gibt für Bilder spezielle Kompressionsalgos (JPEG, LZW, Wavelet) und für Meshes wieder andere (da wird teilweise auch jetzt noch fleißig geforscht).

Thema: unbekannte Anzahl Parameter...
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Auf Codeproject gibt's ne Funktion die scanf emuliert:
http://www.codeproject.com/csharp/CsScanf.asp

Thema: vektor(x,y,z,w) transformation, bedeutung von "w"
Am im Forum: Grafik und Sound

3x4 Matritzen sind aber im Kontext des Matrixkalküls eher unsinnig, da man zwei 3x4 Matrizen nicht miteinander multiplizieren kann. Man nimmt also 4x4 Matrizen, damit man alle Transformationen einheitlich behandeln kann.

Thema: vektor(x,y,z,w) transformation, bedeutung von "w"
Am im Forum: Grafik und Sound

Zitat
also ist "w" die länge? nee oder? oder meinst du, dass wenn w=0.5 und ich habe v=(1,2,3), dann ist der vektor vorher (0.5,1,1.5) gewesen?
Du hast recht (0.5,1,1.5,0.5) wird in (1,2,3) umgerechnet. Als "Länge" kann man sich das weniger vorstellen. Es ist einfach eine Koordinate im 4D Raum.
Zitat
ich bin irgendwie immer noch nicht ganz im klaren wie sich überhaupt "w" verändern kann. auch wenn ich ne translation mache, bleibt doch w gleich oder?
In dem Fall ja. Aber es gibt Transformationen die w ändern. Perspektivische Transformationen zum Beispiel.
Zitat
umal das mit den "unendlich langen" vektoren--- huii. wie kann das mit "0" dargestellt werden? (Beispiel?)
Schattenvolumen sind typische Anwendungsgebiete. Wie ich oben schon gesagt habe, musst du die Vektorkomponenten durch w teilen. Wenn w=0 ist, so gehen die anderen Vektorkomponenten (Grenzwertig betrachtet) gegen Unendlich. Damit kannst du Objekte darstellen, die unendlich groß sind.

Thema: vektor(x,y,z,w) transformation, bedeutung von "w"
Am im Forum: Grafik und Sound

Jo,
die 4. Koordinate braucht man für die Translation. Erweitert man die Tarnsformationsmatrix, so muss man auch die Vektoren um das neue Element erweitern, damit die Matrix-Vektor-Multiplikation weiter funktioniert.
Normalerweise wird w mit 1 initialisiert. Muss man aber nicht. w kann auch andere Werte enthalten. Um den Vektor wieder in seine "eigentliche" Form zu überführen, dividiert man einfach alle Elemente des Vektors durch w. Dieses 4. Vektorelement hat auch noch andere interessante Vorteile: Man kann damit unendlich lange Vektoren darstellen. Dazu wird w mit 0 initialisiert.
Für Schattenvolumen a la Doom 3 ist dies besonders wichtig, da diese "unendlich lang" sein müssen.

Thema: patch
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Etwas eleganter ist es natürlich, nur die Stellen auszubessern, die es wirklich nötig haben. Dazu eignen sich speziellle Diff-Algorithmen:
http://www.codeproject.com/csharp/C__Diff_Algorithm.asp

Thema: ref Parameter einer Methode mit Reflection
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Danke VizOne,
hab's dann auch mit etwas Recherche rausbekommen