Xcode 5 С++ fstream (ifstream и ofstream) не работает

Итак, я пытаюсь прочитать, что находится внутри файла в папке с содержимым моего приложения:

std::string username;
std::ifstream user("../Resources/username.txt");
user >> username;
user.close(); /*here I do a breakpoint to check the value of username and it's ""*/

Я делаю "если", чтобы проверить, открыт ли файл, это явно не может. вы говорите мне, что я делаю неправильно (я знаю, что путь к файлу и его имя верны, я использовал аналогичные процессы для загрузки изображений и т. д. с SDL2 и т. д.)


person user2826636    schedule 12.11.2013    source источник
comment
вам не хватает std::ifstream::in в вашем std::ifstream user(../Resources/username.txt, std::ifstream::in); Кроме того, ваш пример работает для меня в VC++   -  person Rob    schedule 12.11.2013
comment
Я проверю это, как только xcode завершит обновление, но что мне поставить для потока? std::ofstream::выход/вход?   -  person user2826636    schedule 12.11.2013
comment
ifstream и ofstream по умолчанию вход и выход соответственно, так что это не проблема. Вы уверены, что файл действительно открывается? Ты никогда не проверяешь.   -  person Retired Ninja    schedule 12.11.2013
comment
Ну, я проверил это и точно такая же проблема. Как я уже говорил, я проверил, открывается ли файл, и он не   -  person user2826636    schedule 12.11.2013
comment
Тестировал что? Вы проверили, был ли файл открыт, и он был или не был? Когда вы пытаетесь отследить проблему, лучше всего выполнить как можно больше проверок ошибок. В этом случае проверка правильности файла перед чтением — это одно место, а фактическое чтение — это другое место, где вы можете проверить наличие ошибок, но не делаете этого. Что произойдет, если вы поместите файл в тот же каталог, что и исполняемый файл, и попытаетесь открыть его, указав только имя файла, а не относительный каталог?   -  person Retired Ninja    schedule 12.11.2013
comment
Я сделал тест if в потоке, чтобы увидеть, был ли он открыт, и, по-видимому, это было не так, поскольку он не возвращал true   -  person user2826636    schedule 12.11.2013
comment
Я пробовал это: std::string username; std::ifstream user(../Resources/username.txt); if(user) { пользователь ›› имя пользователя; /*здесь точка останова*/ } user.close();   -  person user2826636    schedule 12.11.2013
comment
Что ж, fstream не сломан, и ваш код выглядит нормально, поэтому остается только то, что файл находится не там, где вы думаете. Еще раз внимательно посмотрите на структуру каталогов и посмотрите, где вы ошиблись.   -  person Retired Ninja    schedule 12.11.2013
comment
Вы установили схему проекта для использования папки, в которой находится ваш файл, в качестве рабочего каталога при запуске? По умолчанию это не папка проекта, а фактически какая-то удаленная временная папка, в которой был связан исполняемый файл. Для получения информации о настройке схемы проекта для использования пользовательского рабочего каталога при запуске, см. этот вопрос и ответ.   -  person WhozCraig    schedule 12.11.2013
comment
Я сделал, и путь работает для загрузки других вещей (картинки, звуки, музыка)   -  person user2826636    schedule 12.11.2013


Ответы (1)


попробуй это:

std::string username;
std::ifstream user("C://test.txt", std::ifstream::in);

user >> username;

user.close(); /*here I do a breakpoint to check the value of username and it's ""*/
person Dean    schedule 12.11.2013
comment
должен быть путь, тогда вы должны хотя бы прочитать первую строку в файле - person Dean; 12.11.2013
comment
ну, путь работает для других вещей, таких как изображение, песня и т. Д. (Я использую SDL2), поэтому это меня так сбивает с толку. - person user2826636; 12.11.2013
comment
Вы не сможете прочитать файл с диска C: если вы используете Xcode - person the_mandrill; 12.11.2013