2013-02-20 2 views
0

Я сохранил все файлы, которые я намерен использовать в качестве входных потоков в своем приложении, в папке с именем «res». Я пытаюсь использовать эти файлы в качестве входных потоков путем создания строки в приложении, а затем открыть их, используя что-то вроде этого:ifstream объекты из файлов в других каталогах в C++

.... 
ifstream inputFile; 
.... 
char fileName[30]; 
strcpy(fileName,"res/") 
switch(num){ 
case 1: 
    strcat(fileName,"file1"); 
case 2: 
    strcat(fileName,"file2"); 
.... 
} 

inputFile.open(fileName); 
.... 

Но файлы не открываются, и я не знаю, почему; метод inputFile.is_open() возвращает false. Поэтому у меня есть 2 вопроса:

  1. Как сослаться на файлы в подкаталогах и, по этому вопросу, файлы в других папках в родительском каталоге?

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

Я использую eclipse CDT на Ubuntu 12.04 и компилятор g ++ - 4.6, если это имеет значение.

+5

Ваши случаи проваливаются! –

+1

попробуйте использовать абсолютные пути, только для теста. Если все в порядке с абсолютными путями, чем вы знаете, что ваши относительные пути неверны (путь должен быть относительно exe) – Martinsos

+0

Спасибо, ребята, используя абсолютные пути. Кроме того, я нашел этот поток: http://stackoverflow.com/questions/7276164/how-to-access-a-text-file-while-debugging-with-eclipse-cdt, который помог. Не знал, что каталог верхнего уровня был рабочим каталогом в eclipse – naxchange

ответ

0

Фактически, правильный ответ дается в комментарии. вы забыли перерывы после случаев и соедините несколько имен. также с вашим безумным навыком вам лучше избегать strcat и других низкоуровневых функций и использовать std :: string, или ваш следующий вопрос будет о вашей программе. Сброс ядра

+0

благодаря наблюдению. Я скопировал код в спешке, перерывы присутствовали в моей программе. Я не получаю комментарий о сбрасывании ядра, хотя это потому, что строковые объекты не ограничены по длине? – naxchange

+0

есть. вам нужно проверить длину до вызова strcat. но тогда вы можете просто вызвать memcpy. но зачем вам это делать, когда вы можете просто использовать std :: string fn ("dir /"); fn + = "file"; – pal

+0

, если у вас были перерывы, программа правильная, вы, вероятно, запустили ее из неправильной директории, но это сломается, даже если вы не ставите файлы в подпапку. поэтому для вашего первого вопроса - вы правильно относитесь к поддиреям, а для второстепенных абсолютных путей, когда вы не управляете cwd, не используйте низкоуровневые функции для конкатенации строк или даже смотрите на boost.filesystem – pal