Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Sicherungskopie einer geöffneten Datei erstellen

Empfohlene Antworten

Veröffentlicht

Hallo Leute

Ich habe einen kleinen Texteditor erstellt und möchte nun die Dateien, die ich mit dem"openFileDialog" öffne beim öffnen in eine .BAK-Datei Sichern oder Kopieren.

Dabei soll der Name der Datei beibehalten werden und nur die Endung sich ändern. Aus Text.doc z. B. wird dann Text.bak. Falls es schon eine Sicherungskopie von dieser Datei gibt, dann soll sie überschrieben werden.

Wenn ich das richtig sehe ist eine "BAK-Datei" immer eine Sicherungskopie einer Datei. Also müsste meine Methode ungefähr so heißen:



Void Copy(String ^Quelldatei, String ^zieldatei, bool ueberschreiben)


Quelldatei ist dabei meine Text.doc und Zieldatei Text.bak das Überschreiben bewirkt dann die Bool-Anweisung in der überprüft wird ob es die Datei Text.bak schon gibt. Das ganze Kopieren der Datei müsste dann in der Methode "Void openFileDialog1_FileOK" aufgerufen werden und zwar nach dem Laden der Datei. Hier meine eigene Methode zum kopieren der Datei:



Void sicherungsKopie(String ^dateiname, String ^kopie, Boolean ^ueberschreiben)

			 {

				 dateiname = openFileDialog1->FileName;

				 kopie = dateiname;			// kopie erhält den Namen der Datei 

				 kopie = (dateiname,"C:\\Users\\dag\\Desktop\\test\\Archiv\\*.bak");			// ?	


				 ueberschreiben =					// ?


				 File::Copy(dateiname, kopie );

			 }


Meine "FileoK"-Methode:


private: System::Void openFileDialog1_FileOk(System::Object^  sender, System::ComponentModel::CancelEventArgs^  e) 

		 {

			 // den Namen setzen

			 dateiname = openFileDialog1->FileName;

			 this->Text = dateiname;


			 // die Datei laden

			 richTextBox1->LoadFile(dateiname);


[B]Hier müsste ich dann meine Kopiermethode aufrufen[/B]

			 // die Eigenschaft Modified zur Sicherheit auf false setzen

			 richTextBox1->Modified = false;



		 }


Ich komme einfach auf keine Idee, wie ich den Namen der Quelldatei an die Zieldatei übergebe und dann noch mit der Endung .bak versehe. Die Abfrage, ob die Bak-Datei vorhanden ist denke ich mal wird so aussehen können.:


if(IO::File::Exists(kopie))

{

überschreibe ???


Lieben Dank für Eure Hilfe

lempy

Habs nur kurz überflogen, aber was ist wenn du die ein eigenes binäres Format machst. Zuerst schreibst du in eine Datei den Namen der Quelldatei und danach die Bytes der Quelldatei, fertig. Lies dich bei Msdn mal in Binaryreader/Binarywriter ein.

Moin!

Du arbeitest mit dem .net-Framework, also brauchst Du keine eigene Copy-Methode schreiben, sondern kannst mit File.Copy arbeiten. Wenn Du die Sicherungskopie immer überschreiben willst, kannst Du den Parameter "overwrite" einfach auf true setzten, dann musst Du auch nicht prüfen, ob die Datei existiert.

Ich verstehe nicht ganz, was Du damit meinst "den namen der Quelldatei an die Zieldatei zu übergeben.". Der Name ist doch gleich, nur die Erweiterung ist anders, d.h. Du musst einfach die Endung abtrennen und die Endung "bak" anfügen. Stichworte zur Recherche wären hier String.LastIndexOf oder Regex(vielleicht noch etwas viel für den Anfang).

  • Autor

Hallo Pointerman

"Quelldatei an Zieldatei" übergeben. Meine Quelldatei habe ich schon in einen Ordner. Also der Name Text.doc ist schon vergeben und diese Datei möchte z. B. zum Bearbeiten öffnen. Beim Öffnen soll eine weitere Datei entstehen, die den selben Inhalt hat wie meine Text.doc bevor ich meine Änderungen vorgenommen habe. Diese Datei soll dann aber als Text.bak in z. B. einen anderen Ordner "gesichert" werden.

Quelle = Text.doc, Ziel = Text.bak in ? Ordner. Die "Variable" Dateinamen bezieht sich auf Text.doc aber aus dem doc soll ein .bak werden. Da fehlt mir die Idee wie ich das anstellen.

Wie trennen ich die Endung ab?

Zu Repac3r

MSDN ist sehr gut, aber auch nur wenn man nicht wie ich Anfänger ist und das ganze in seiner engbemessenen Freizeit macht. Vieles verwirrt einen Anfänger nur. Das sind die meisten Artikel, die sich mit C++/CLI und Forms beschäftigen. Ich brauche eher so eine Hilfe wie " ... für Dummys". Es ist nicht immer leicht den Einstieg wieder ordentlich zu finden.

Zu SilentDemise:

Na ja, ist so mein ding. Ich denke oft über tausend Ecken und daher viel zu kompliziert. Aber es hilft mir auch dabei Dinge von anderen Seiten zu betrachten.

Auf jeden Fall werde ich mir Eure Stichworte notieren und danach Recherche betreiben. Melde mich danach.

Lieber Gruß

lempy

Hallo lempy,

Zitat:"Die "Variable" Dateinamen bezieht sich auf Text.doc aber aus dem doc soll ein .bak werden. Da fehlt mir die Idee wie ich das anstellen."

Suchst du zufällig (einfach nur) nach Möglichkeiten zur Stringmanipulation in .Net (Dein Stichwort!) ;) zum Beispiel "Ersetzen" (Replace) ?

Als Tip! Behalte doch die alte Dateierweiterung bei und füge nur ein .bak an somit weiss man auch auf anhieb um was für eine Sicherung es sich handelt ;) !

Gruß

Patrick

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.