2015-11-20 5 views
2

Привет, ребята, поэтому я быстро написал тестовую программу, чтобы показать вам вопрос, который у меня есть.fstream C++ Pathing

Я использую fstream для записи данных в файл для своей игры, чтобы они могли загружать и сохранять свои переменные.

#include <iostream> 
#include <fstream> 
#include <string> 

int main() 
{ 
std::ofstream outputFile; 
outputFile.open("PlayerData"); // This creates the file 


std::string Name; 
int Age; 

std::cout << "Your Name: "; 
std::cin >> Name; 
outputFile << Name << std::endl; 
std::cout << "Your Age: "; 
std::cin >> Age; 
outputFile << Age << std::endl; 


outputFile.close(); 


return 0; 




} 

При запуске программы она создает файл "PlayerData" в:

Visual Studio 2013 \ Projects \ TestFilePathing \ TestFilePathing

Все работает отлично, но я хотел бы, чтобы вместо PlayerData файл, сбрасываемый в каталог TestFilePathing, я хотел бы, чтобы он был создан в подкаталог для целей организации.

спасибо: D

ответ

0

Используйте подкаталог в пути к файлу:

outputFile.Open("SubDirectory/PlayerData"); 

Причина, по которой заканчивается в Visual Studio 2013\Projects\TestFilePathing\TestFilePathing является то, что у вас есть этот каталог в качестве рабочей директории в параметрах отладки. (Проверьте конфигурацию проекта). Если вы измените этот каталог (или запустите двоичный файл из командной строки в другой директории), этот файл окажется в этом каталоге.

Если вы укажете относительный путь, вы получите это поведение. В противном случае вы можете указать абсолютный путь, и файл будет там постоянно, независимо от того, что ваш рабочий каталог.

+1

Обратите внимание, что это будет работать только в том случае, если путь уже существует. – Angew

+0

Что делать, если я использую «PlayerData» в качестве переменной CharacterName, чтобы показать индивидуальность между игроками. std :: string Jacob = "Jacob"; std :: ofstream outputFile; outputFile.open («Игроки»/Якоб); // Создает файл –

+0

Создайте имя файла перед созданием имени файла. –

0

Если не указать путь, файл будет создан в текущем каталоге, то есть обычно не желаемое поведение. Вы должны указать полный путь, чтобы гарантировать, что филе будет сохранено там, где вы хотите. Если вы хотите узнать путь к текущему исполняемому файлу, вы можете использовать этот второй вопрос: https://stackoverflow.com/a/1528493/566608. Как только у вас есть путь, вы можете выбрать местоположение на пути рядом с исполняемым файлом, чтобы сохранить данные. Или, если хотите, используйте системные папки (в зависимости от операционной системы, как узнать их имена, в Windows проверьте this.) Никогда не доверяйте текущему каталогу как пути или его части, поскольку пользователь всегда может выбрать запуск вашей программы с другим текущим каталогом.