File Merger

zecken81

Mitglied
Hey Csharpler,

Ich bin gerade dabei einen Mgerer zu programmieren. Das Problem es handelt sich um *.stl Dateien machen (3D-Dateien). Ich weiß auch wie die *.stl Dateien aufgebaut sind. Ist auch als Dateianhang eingefügt.

Habe es hinbekommen, dass er eine neue Datei generiert und da ist auch was drin. STL dateien sind Millionen von Dreiecken. In meiner Datei ist aber NUR ein Dreieck.

Ich würde gerne wollen, dass das Programm die einzelnen STL Dateien in dem Ordner erkennt ( was auch funktioniert) dann soll er die erste Datei auslesen und in eine neue STL Datei schreiben. Dann soll er die zweite Datei im Ordner lesen und in die gleiche STL Datei schreiben usw usw. Bis alle Dateien abgearbeitet wurden.

Über Infos oder Ratschläge wäre ich sehr dankbar

Zecken81
 

Anhänge

  • STL.JPG
    STL.JPG
    28,8 KB · Aufrufe: 30
Hallo,

wenn bloß ein Dreieck in der Datei steht steht, vermute ich mal, dass die neue Datei nicht im Append-Modus geöffnet wurde. Das sollte etwa so aussehen:
C#:
using( StreamWriter sw = File.AppendText("neue_datei.stl") ) 
{
    sw.WriteLine(" .... ");
    ....

}
Ansonsten müsstest du etwas genauer beschreiben (Code), was du schon gemacht hast bzw. wo es konkret hängt.

Gruß
MCoder
 
Hey danke für die Antwort und entschuldige, dass ich so spät antworte.

Mache es mit File.Append. Daran liegt es glaub ich nicht. Aber hier mal ein Teil des Codes


FileInfo fi1 = new FileInfo(input1);
FileStream fs1 = new FileStream(input1, FileMode.Open);
BinaryReader br1 = new BinaryReader(fs1);
FileInfo fi2 = new FileInfo(input2);
FileStream fs2 = new FileStream(input2, FileMode.Open);
BinaryReader br2 = new BinaryReader(fs2);
FileStream stl1 = new FileStream(outFile, FileMode.Create,FileAccess.ReadWrite,FileShare.ReadWrite);
stl1.Close();
FileStream stl = new FileStream(outFile, FileMode.Append,FileAccess.Write,FileShare.ReadWrite);
BinaryWriter bw = new BinaryWriter(stl);

byte[] HeaderArray1 = new byte[80]; //HEADER
fs1.Position = 0;
fs1.Read(HeaderArray1,0,80);
//------------------------------------------------//





fs1.Position = 80;
int AnzahlDreiecke1 = br1.ReadInt32(); //DREIECKE
for (int i = 0;i<AnzahlDreiecke1;i++)
{


byte[] AnzahlNormal1 = new byte[12]; // Normale
fs1.Read(AnzahlNormal1,0,12);

Das Schreiben wird dann mit dem BinaryWriter gemacht.

Ist hier evtl. ein Fehler
 
Hallo,

der BinaryWriter sollte nicht das Problem sein. An deinem Code ist mir nichts aufgefallen. Allerdings hast du den interessanten Teil, das Schreiben und die Behandlung der zweiten Datei, ausgelassen. Außerdem solltest du die Quellen mit den Code-Tags einschließen ([code=csharp] ... [/code]), damit sie besser lesbar werden.
Den Ausgabefilestream brauchst du zum Anlegen übrigens nicht extra zu öffnen, das passiert auch beim FileMode.Append.

Gruß
MCoder
 
Aha ok wußte nicht das der geöffnet wird. Danke.

(
C#:
 byte[] x11 = new byte[4];
		fs1.Read(x11,0,4);
		
		byte[] y11 = new byte[4];
	    fs1.Read(y11,0,4);
		
	    byte[] z11 = new byte[4];
		fs1.Read(z11,0,4);

So werden die einzelnen Positionen eingelesen. 

stl.Position = 0;
bw.Write(HeaderArray1);
stl.Position = 80;
bw.Write(dgesamt);
stl.Position = 84;
.
.
.
.
stl.Position = 96;
bw.Write(x11);
stl.Position = 100;
bw.Write(y11);
stl.Position = 104;
bw.Write(z11);
)

Vielleicht erkennst du hier einen Fehler.

Danke im Voraus
 
Hmm, ich weiß jetzt nicht, ob und wie sich das genau auswirkt, aber im Append-Modus solltest nicht mit "Position" arbeiten. Jeder Write-Aufruf fügt die Daten immer an das Ende der Datei an.

Gruß
MCoder
 
Und genau das ist mein Problem.

Ich muss ja aus mehreren Dateien bestimmte Bytes auslesen, die wichtige Infos für mich haben. Diese muss ich aber auch wieder an die Position schreiben.


Naja wie dem auch sei. Hatte eine kleine Vorlage in Delphi und versuch mich jetzt da einzuarbeiten und das Tool an meine Bedürfnisse anzupassen.

Ich danke dir ganz herzlich und wünsche dir noch einen schönen Tag.

Falls du doch noch eine Lösung findest einfach posten weil ich kein Bock hab Delphi ganz zu erlernen :)

Aber ich glaube, dass mein Problem nicht ganz trivial ist und werde deshalb dieses Thema als erledigt abhacken.
 
Vielleicht ist es sinnvoll, die Datenstruktur erst im Speicher zu erzeugen und dann in eine Datei zu schreiben.

Gruß
MCoder
 

Neue Beiträge

Zurück