Forum: PC-Programmierung Tips zur Verbesserung


von Nussecke (Gast)


Lesenswert?

Guten Tag,

ich habe ein kleines PC Tool fertig gestellt und das funktioniert auch 
soweit. Es soll eine Datei über USB versenden werden. Zuvor wird eine 
MD5 darüber berechnet und eingefügt. Da ich noch Anfänger bin und bisher 
nicht wirklich viel programmiert habe, wollte ich kurz um ein paar 
Verbesserungsvorschläge bitten.

1. Das Tool öffnet eine .xml Datei auf dem Computer
--> habe die Datei mit fstream geöffnet.

2. anschließend berechne ich eine MD5 Summe über die Gesamte Datei und 
möchte sie in der Datei an erster Stelle einfügen.
--> Die MD5 habe ich berechnet, soweit kein Problem.
--> Anschließend die 16 Byte MD5 in einem char Array abgespeichert.
--> Anschließend habe ich die gesamte xml datei mit fstream.read in ein 
zweites Array gelesen.
--> In ein drittes Array habe ich anschließend zuerst das Array 1 
kopiert und anschließend dahinter das zweite Array.
--> Danach erstelle ich mir eine temporäre zweite xml Datei auf dem PC
--> schreibe mit fstream.write das dritte Array hinein.

3. Anschließend wird die temporäre Datei über USB versendet.
Danach lösche ich die temporäre xml Datei mit remove("dateiname.xml")


Meine Lösung funktioniert zwar, kommt mir aber etwas umständlich vor. 
Fällt euch spontan ein Verbesserungsvorschlag ein ?
Kann ich mir sicher sein, dass mit remove die Datei weg ist und nicht 
den PC zumüllt ?

von Programmierer (Gast)


Lesenswert?

Mache ein Array in der Größe der Datei + 16 Bytes. Lese die gesamte 
Datei ab Position 16 in das Array. Berechne die MD5 und speichere sie ab 
Position 0 im Array. Schicke das gesamte Array über USB raus. Somit 
brauchst du nur ein einziges Array und keine extra Datei.

von Programmierer (Gast)


Lesenswert?

PS: USB sichert die Datenübertragung onehin schon per Prüfsumme, somit 
sind (unerkannte) Übertragungsfehler ziemlich unwahrscheinlich...

von Peter II (Gast)


Lesenswert?

warum nicht die MD5 ans ende hängen, das würde die Sache sehr stark 
vereinfachen.

von Nussecke (Gast)


Lesenswert?

Die Gegenseite erwartet die MD5 am Anfang und lässt sich nicht ändern.

von Karl H. (kbuchegg)


Lesenswert?

Nussecke schrieb:

> 3. Anschließend wird die temporäre Datei über USB versendet.

Wer (wessen Code) macht das?
Deiner?

Dann gibt es normalerweise keinen Grund, warum du zuerst eine 
Zwischendatei erstellen musst. Der Empfänger kann sowieso nicht 
unterscheiden, ob von deiner Seite aus alles in einer Datei war oder 
nicht. Der sieht nur einen Strom von Bytes auf seiner Eingangsseite

MD5 berechnen
Ausgabekanal öffnen
berechnete MD5 auf den Weg schicken
Dateiinhalt nachschicken
Ausgabekanal schliessen

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Selbiges in deiner Lösung.
Da wird ziemlich viel hin und her kopiert.

Die Daten, die du mit einem fstream Objekt in eine Datei schreiben 
lassen willst, müssen keineswegs alle von der gleichen Variablen im 
Programm stammen. Es spricht nichts dagegen, dass du zuerst das Arraya 
mit dem MD5 Wert ins File schreiben lässt (Array 1) und dann einfach mit 
dem Schreiben der Daten von deiner eingelesenen Datei (Array 2) 
weitermachst. Das Zusammenkopiern in ein gemeinsames Array ist unnötig, 
verbraucht nur Rechenzeit und Speicher - bringt dir aber nichts. Dann 
hast du halt 2 fstream.write Aufrufe. Den Stream störts nicht.

: Bearbeitet durch User
von Karl Käfer (Gast)


Lesenswert?

Hallo Gebäck,

Nussecke schrieb:
> 3. Anschließend wird die temporäre Datei über USB versendet.
> Danach lösche ich die temporäre xml Datei mit remove("dateiname.xml")
>
> Meine Lösung funktioniert zwar, kommt mir aber etwas umständlich vor.
> Fällt euch spontan ein Verbesserungsvorschlag ein ?

TIMTOWTDI.

> Kann ich mir sicher sein, dass mit remove die Datei weg ist und nicht
> den PC zumüllt ?

Nein. Wenn das Programm bei der USB-Übertragung abraucht, bleibt die 
Datei wo sie ist. Du kannst die Datei bereits löschen, wenn Du ihren 
Inhalt (mit fstream.read()) in Deinen Puffer gelesen hast.

Unter UNIXartigen wie Linux kannst Du die Datei sogar schon direkt nach 
dem Öffnen löschen; da bleibt Dir das offene Dateihandle erhalten und Du 
kannst aus dem laufenden Programm weiter mit der Datei arbeiten, als sei 
nichts gewesen. Wenn das letzte Dateihandle geschlossen wird, gibt das 
Betriebssystem dann den belegten Festplattenspeicher frei.

Liebe Grüße,
Karl

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.