Ścieżka do pliku, tworzenie pliku, operacje na nich

0

Witajcie. Aby poćwiczyć operację na plikach postanowiłem pobawić się i zrobić jakiś program. Program ma "kopiować" z oryginalnego pliku zawartość, tworzyć nowy plik, wklejać do nowego pliku zawartość oryginalnego a potem po wyborze jednego z plików wklejać od nowa zawartość do oryginalnego . Dajmy na to, że stworzyłem kilka plików o nazwie:
druid
rycerz
paladyn
mag
Oraz mamy jeszcze plik o nazwie: oryginalny. Program po wpisaniu :
druid (tworzy nowy plik o nazwie druid z zawartością pliku oryginalnego)
druid (kopiuje zawartość druid i wkleja do oryginalnego).

Niestety wyskakuje mi "Error: No file to copy"

Oto kod:

#include "functions.h"
string GetCurrUserName()
{
	char user[256];
	string users;
	unsigned long l = 256;
	GetUserName(user, &l);
	strcpy_s(user, users.c_str());
	return users;
}

bool LoadHotkeyFile(string &hotkeys)
{
	string filepath = "C:/Users/" + GetCurrUserName() + "/AppData/Roaming/Tibia/Tibia.cfg";
	fstream TibiaConfig(filepath.c_str(), ios::in | ios::out | ios::app);
	if(!TibiaConfig)
		return false;
	else
		cout << "Tibia.cfg found: " << filepath << "\n";
	return true;
	while(!TibiaConfig.eof())
	{
		getline(TibiaConfig, hotkeys);
	}
	cout << "Tibia.cfg was copied successfully\n";
	TibiaConfig.close();
	return true;
}
bool CreateNewSettings()
{ 
	string hotkeys, namefile, filepath;
	LoadHotkeyFile(hotkeys);
	//if(hotkeys.length() > 0)

	cout << "Enter file name to hotkeys: ";
	cin >> namefile;

	filepath = "C:/Users/" + GetCurrUserName() + "/AppData/Roaming/Tibia/" + namefile + ".cfg";
	fstream advenced(filepath, ios::in | ios::out | ios::app);
	if(!advenced)
	{
		ofstream FilePath(filepath, ios::in | ios::out | ios::app);
		FilePath << hotkeys;
		FilePath.close();
	}
	else
	{
		advenced.clear();
		advenced << hotkeys;
		advenced.close();
	}

	return true;
}

bool LoadNewSettings()
{
	string hotkeys, namefile, filepath;
	cout << "Enter file name to hotkeys: ";
	cin >> namefile;
	filepath = "C:/Users/" + GetCurrUserName() + "/AppData/Roaming/Tibia/" + namefile + ".cfg";
	string filepathPaste = "C:/Users/" + GetCurrUserName() + "/AppData/Roaming/Tibia/Tibia.cfg";
	fstream ToCopy(filepath, ios::in | ios::out | ios::app);
	if(!ToCopy)
	{
		cout << "Error: No file to copy...\n";
		return false;
	}
	fstream Topaste(filepathPaste, ios::in | ios::out | ios::app);
	if(!Topaste)
	{
		cout << "Error: No file to paste...\n";
		return false;
	}
	while(!ToCopy.eof())
	{
		getline(ToCopy, hotkeys);
	}
	Topaste.clear();
	Topaste << hotkeys;
	Topaste.close();
	ToCopy.close();
	return true;
}
 

Zła metoda tworzenia plików, może ścieżka jest zła ?

0

if(!TibiaConfig)
return false;
else
cout << "Tibia.cfg found: " << filepath << "\n";
return true; <-- tutaj błąd
poprawiłem to, widzę błąd. Generalnie program nie wyświetla mi nawet iż znalazło ten plik, więc funkcja bool LoadHotkeyFile(string &hotkeys) już jest zła...

0

string filepath = "C:/Users/" + GetCurrUserName() + "/AppData/Roaming/Tibia/Tibia.cfg";
fstream TibiaConfig(filepath.c_str(), ios::in | ios::out | ios::app);
Źle, źle, źle.
C:/ To nie musi być dysk C, Windowsa można instalować na dowolnym dysku
/Users/ Katalog użytkownika może być w zasadzie pod dowolną ścieżką, na win XP domyślna ścieżka to
<dysk-gdzie-zainstalowano-Windows>:\\Documents and Settings\
+ GetCurrUserName() katalog użytkownika może mieć inną nazwę niż sam użytkownik
+ "/AppData/Roaming/ katalog APPDATA użytkownika może być pod inną ścieżką, na XP jest to
<katalog użytkownika>\Dane Aplikacji (zauważ zależność nawet od wersji językowej Windows'a!)

Windows Environment Variables
SHGetFolderPath
SHGetKnownFolderPath (min. Vista)

1 użytkowników online, w tym zalogowanych: 0, gości: 1