C++ Datei Verschieben

KingLM97

Lieutenant
🎅Rätsel-Elite ’18
Registriert
Mai 2012
Beiträge
918
Hallo,

tut mir Leid das ich wieder nen Thread erstelle...
Ich möchte nun eine Datei, die soeben Angelegt wurde, verschieben. Dabei wird über "cin" der aktuelle Dateipfad bestimmt "DateiPfad1" und der Dateipfad, wo die Datei hinsoll "DateiPfad2", wird auch über "cin" ermittelt.

Code:
Code:
// Irgendwas.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;


int main()
{
	string dateiName;
	string TextInDerDatei;
	string DateiPfad1;
	string DateiPfad2;
	int a;
	int b;

	fstream datei;

	cout << "Bitte geben sie zuerst einen Dateinamen ein: " << endl;
	cin >> dateiName;
	datei.open(dateiName.c_str(), ios::out);

	cout << "Bitte geben sie den Inhalt des Textes ein: " << endl;
	cin >> TextInDerDatei;
	datei << TextInDerDatei << endl;
	cout << "Möchten sie die Datei verschieben? Drücken sie 1 für JA, oder 2 für NEIN." << endl;
	cin >> a;
	if(a == 1)
		cout << "Bitte geben sie den Aktuellen Standort der Datei ein." << endl;
		cin >> DateiPfad1;
		cout << "Wird verarbeitet..." << endl;
		cout << "Geben sie nun Standort an, wohin die Datei soll!" << endl;
		cin >> DateiPfad2;
		cout << "Vielen Dank. Bitte haben sie einen Moment Geduld. Datei wird verschoben..." << endl;
		cout << "0%" << endl;
		cout << "10%" << endl;
		cout << "20%" << endl;
		cout << "30%" << endl;
		cout << "40%" << endl;
		cout << "50%" << endl;
		cout << "60%" << endl;
		cout << "70%" << endl;
		cout << "80%" << endl;
		cout << "90%" << endl;
		cout << "99%" << endl;
		cout << "System overloaded!" << endl;
		system("pause");
		cout << "0%" << endl;
		cout << "10%" << endl;
		cout << "20%" << endl;
		cout << "30%" << endl;
		cout << "40%" << endl;
		cout << "50%" << endl;
		cout << "60%" << endl;
		cout << "70%" << endl;
		cout << "80%" << endl;
		cout << "90%" << endl;
		cout << "100%" << endl;
		//Hier soll der Verschieben Befehl hin
		system("pause");
		cout << "Datei erfolgreich nach " << DateiPfad2 << "verschoben!" << endl;

	datei.close();
}

Beachtet die ganten cout's einfach nicht...
Da ich ja den Text bestimmen kann, wird Der Ganze Text einfach nach einen . oder , einfach abgebrochen. Kann man das irgendwie lösen?
Ich bin nicht der Mega-Pro in C++...
Wie also mache ich es nun, dass die Datei verschoben wird?
 
Ein Beispiel:

MoveFile("C:\\Programme\\Mozilla Firefox\\firefox.exe","C:\\Programme\\firefox.exe");

Google ist dein Freund :)
 
OK, das habe ich nun. Aber wie mache ich nun, das DateiPfad1 und DateiPfad2 verwendet werden? ich muss ja auch noch die erstellte Datei einfügen.
Geht das vllt so?
MoveFile(DateiPfad1 << dateiName, DateiPfad2);
??
 
Das mit den variablen sollte dann so gehen:

#include <stdio.h>
int main()
{
rename("C:\\"Dateipfad1"\"Dateiname1, "C:\\"DateiPfad2"\"Dateiname2); // rename(DateiPfad1,DateiPfad2);
return 0;
}

Aber ich bin mir nicht sicher :freak: mein letzter C++ Kurs ist zu lange her und ich faule Sau hab auch nix mehr selber gemacht :rolleyes:
 
Habe des nun so:
Code:
// Irgendwas.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <fstream>
#include <string>

using namespace std;


int main()
{
	string dateiName;
	string TextInDerDatei;
	string DateiPfad1;
	string DateiPfad2;
	int a;
	int b;

	fstream datei;

	cout << "Bitte geben sie zuerst einen Dateinamen ein: " << endl;
	cin >> dateiName;
	datei.open(dateiName.c_str(), ios::out);

	cout << "Bitte geben sie den Inhalt des Textes ein: " << endl;
	cin >> TextInDerDatei;
	datei << TextInDerDatei << endl;
	cout << "Möchten sie die Datei verschieben? Drücken sie 1 für JA, oder 2 für NEIN." << endl;
	cin >> a;
	if(a == 1)
		cout << "Bitte geben sie den Aktuellen Standort der Datei ein." << endl;
		cin >> DateiPfad1;
		cout << "Wird verarbeitet..." << endl;
		cout << "Geben sie nun Standort an, wohin die Datei soll!" << endl;
		cin >> DateiPfad2;
		cout << "Vielen Dank. Bitte haben sie einen Moment Geduld. Datei wird verschoben..." << endl;
		cout << "0%" << endl;
		cout << "10%" << endl;
		cout << "20%" << endl;
		cout << "30%" << endl;
		cout << "40%" << endl;
		cout << "50%" << endl;
		cout << "60%" << endl;
		cout << "70%" << endl;
		cout << "80%" << endl;
		cout << "90%" << endl;
		cout << "99%" << endl;
		cout << "System overloaded!" << endl;
		system("pause");
		cout << "0%" << endl;
		cout << "10%" << endl;
		cout << "20%" << endl;
		cout << "30%" << endl;
		cout << "40%" << endl;
		cout << "50%" << endl;
		cout << "60%" << endl;
		cout << "70%" << endl;
		cout << "80%" << endl;
		cout << "90%" << endl;
		cout << "100%" << endl;
		rename(DateiPfad1,DateiPfad2);
		//Hier soll der Verschieben Befehl hin
		system("pause");
		cout << "Datei erfolgreich nach " << DateiPfad2 << "verschoben!" << endl;

	datei.close();
}
Es kommt ein Error:
Code:
c:\dokumente und einstellungen\administrator.ip-015-104\eigene dateien\visual studio 2008\projects\irgendwas\irgendwas\irgendwas.cpp(64) : error C2664: 'rename' : cannot convert parameter 1 from 'std::string' to 'const char *'

Error:
Code:
rename(DateiPfad1,DateiPfad2);
Und wie verschiebe ich jetzt die erstellte Datei? Also "dateiName"?
 
Zwei Strings verbindet man normalerweise mit strcat(str1, str2) , wobei str2 an str1 angefügt wird.
 
Dateipfad1.c_str() sollte gehen. Allerdings müsste der User dann den kompletten Pfad mit Anwendung und Dateiendung angeben, wenn ich mich nicht irre. Mir war bisher gar nicht bewusst, dass es für ss was, wie das Dateiverschieben, schon eine vorgefertigte Funktion gibt :D
 
OK, ich bin jetzt nicht der Mega-Pro in dieser Sache, das ist sowas wie total fremdes Gebiet. Kann mir jetzt mal jemand nen ordentlichen Code dazu geben? Ich blicke nicht mehr durch....
 
Ok die Erklärung für den Fehler ist folgende:
Du hast C++-Strings verwendet während die Funktion rename noch aus dem C-Standard stammt und somit C-Strings erwartet. Glücklicherweise kann man die neuen Strings aber einfach in die alten Umwandeln. Das geht mit variablenname.c_str()

Als Code:

Code:
rename(DateiPfad1.c_str(),DateiPfad2.c_str());

Das sollte zumindet schonmal den Fehler beheben. Ich denke, dass es dann klappen sollte. Allerdings habe ich bisher noch nie rename verwendet.
 
Wie wäre es wenn du mal mit dem arbeitest was schon gepostet wurde und dann selbst recherchierst? Wenn du dir immer nur fertigen Code servieren lässt und es irgendwie per copy&paste zusammenfrickelst wirst du es als Programmierer nicht sehr weit bringen.

Die relevanten Funktionen wurden genannt: rename, strcat
Zudem wurde sogar die Dokumentation dazu verlinkt: http://www.cplusplus.com/reference/clibrary/cstdio/rename/

/edit: Ein Beispiel in reinem C, da du es ja anscheinend hinbekommen hast:
Code:
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char** argv)
{
  if (argc != 3)
  {
    printf("Error: Invalid number of arguments.\n"
        "Usage: movefile <source> <destination>\n");
    return EXIT_FAILURE;
  }

  if (rename(argv[1], argv[2]) != 0)
  {
    printf("Error moving file.\n");
    return EXIT_FAILURE;
  }

  printf("File moved successfully\n");
  return EXIT_SUCCESS;
}
 
Zuletzt bearbeitet:
Es hat geklappt, danke.
 
Zurück
Oben