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 ?
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.
PS: USB sichert die Datenübertragung onehin schon per Prüfsumme, somit sind (unerkannte) Übertragungsfehler ziemlich unwahrscheinlich...
warum nicht die MD5 ans ende hängen, das würde die Sache sehr stark vereinfachen.
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.