2010-10-25 3 views
4

Я переехал из Windows в Mac, и теперь у меня возникла проблема с классами ввода/вывода файлов: ifstream & ofstream.C++: Где класс ofstream сохраняет файлы?

В Windows при запуске с г ++/блоки кода

ofstream out("output.txt"); 
out << "TEST"; 
out.close(); 

Новый файл «output.txt» будет создан в то же каталога.

Однако в MAC OS X, этот файл создается в моем домашнем каталоге: /Users/USER_NAME/output.txt

Как я могу иметь этот файл в том же каталоге, вместе с исполняемым файлом?

P.S. Я использую GCC и CodeBlocks. Нет проектов - я просто компилирую один исходный файл.

+0

Проверьте настройки кодоблок. Вероятно, это установка текущего рабочего каталога перед запуском приложения. –

ответ

5

Классы потоков, как и все другие функции файл-открытия, используйте текущий каталог когда вы предоставите относительный путь. Вы можете управлять текущим каталогом с помощью функции, такой как chdir, но лучшим решением является использование полностью определенных имен файлов. Затем вы удаляете зависимость своей программы от текущего каталога.

+0

У меня проблемы с C++. У меня их десятки. И если я укажу абсолютный путь - программы не будут запускаться в Windows. Кроме того, если я изменю каталог, они тоже не будут работать. – Alex

+0

@Alex Absolute не означает постоянную: -D Вы, конечно, должны генерировать абсолютный путь из текущей позиции программы. Используйте argv [0], чтобы увидеть относительный путь, используемый для выполнения программы. –

+1

@Let_Me_Be, но Роб сказал, что «лучшим решением является использование полностью квалифицированных имен файлов» ... Я полностью смущен. Мне просто нужно получить доступ к файлам из каталога, в котором находится исполняемый файл. – Alex

0

Вам необходимо предоставить полный, абсолютный путь к файлу, который вы пытаетесь создать.

2

Файл просто создается в текущем рабочем каталоге. Измените рабочий каталог или укажите полный путь.

+0

Как изменить рабочий каталог? – Alex

+1

Для этого вам потребуется использовать API OS. В POSIX это chdir: http://www.opengroup.org/onlinepubs/009695399/functions/chdir.html –

1

Рабочий каталог изначально устанавливается при запуске программы. Когда вы запускаете его из командной строки, вы наследуете текущий рабочий каталог из оболочки. В CodeBlock одним из вариантов проекта является выполнение рабочего цикла для отладочных запусков.

(смотри также http://www.gamedev.net/community/forums/topic.asp?topic_id=571206&whichpage=1�)

+0

Даже когда я запускаю его из командной строки, он по-прежнему создает текстовые файлы в папке USER. – Alex