2016-07-29 5 views
2

Я использую Mac и Xcode для моего следующего кода, который должен получить значение cin для name и age и записать их в файл fileProcessingTrial.txt.Где мой файл хранится, если я пишу файл, используя onstream на Mac?

#include <iostream> 
#include <string> 
#include <fstream> 
#include <cstdlib> 
using namespace std; 

int main() 
{ 
    // insert code here... 
    string name; 
    int age; 
    ofstream fileProcessing("fileProcessingTrial.txt", ios::out); 
    cout<<"Please enter your name: "<<endl; 
    cin>>name; 
    cout<<"Please enter your age: "<<endl; 
    cin>>age; 
    fileProcessing<<name<<" "<<age<<endl; 
    return 0; 
} 

А потом, где мой файл fileProcessingTrial.txt хранится (по умолчанию?), Если я хочу, чтобы открыть его? Могу ли я хранить его в определенном месте?

+1

Это может зависеть от вашей IDE (или, по крайней мере, от linux и windows). – drescherjm

+2

Зависит от того, что «текущий рабочий каталог» приложения находится на момент написания файла. –

+0

Согласовано. IDE обычно устанавливают для вас папку по умолчанию и дают вам возможность изменить значение по умолчанию в среде IDE. Хотя при этом говорится, что программа также может изменить свой рабочий каталог. Однако ОП не будет спрашивать, изменили ли они его в коде. – drescherjm

ответ

2

Я думал, что добавлю ответ, специфичный для Xcode. Если вы создаете и запускаете исполняемый файл в Xcode (IDE), то выходной файл (если вы не указали абсолютный путь для имени файла) перейдет в тот же каталог, что и Build Products, потому что именно там построен исполняемый файл будет. Это становится current working directory, упомянутым Jesper Juhl, когда Xcode запускает исполняемый файл. Чтобы найти это, нажмите на продукт в Навигатор проекта (на приведенном ниже снимке это File Out исполняемый файл в левой панели). Затем посмотрите в файле File Inspector в верхней правой панели. Часть каталога Полный путь - это ваш выходной файл.

enter image description here

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

В Xcode, вы можете также изменить current working directory путем редактирования схемы:

  1. Перейти к Параметры вкладка под Run в редакторе схемы.
  2. Нажмите на Использовать пользовательский рабочую директории флажка
  3. Выберите или введите рабочий каталог (абсолютный путь)

Надеется, что это помогает.

2

Если вы не указали путь (абсолютный или относительный), тогда файл будет создан в current working directory (aka CWD) приложения во время создания файла.

Программа может изменять свой CWD с помощью chdir() и получать ее текущую с помощью getcwd().

Обычно при запуске программы программы могут меняться в какой-либо известный каталог и выполнять всю свою работу там, если они являются демонами.

В некоторых приложениях также часто определяется местоположение их исполняемого файла (например, путем чтения /proc/self/exe на Linux), а затем записывать файлы в каталог по отношению к этому.

Другие широко используемые варианты: запись в домашний каталог пользователей или в каталог, указанный в командной строке или в файле конфигурации.

Когда вы запускаете программу из оболочки, CWD первоначально будет каталогом, в котором находился пользователь при запуске приложения.

При запуске из IDE CWD обычно устанавливается IDE в определенное место, указанное в его конфигурации.

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

+2

.. и что файлы _wants_ пользователя хранятся на этом пути, если он существует. Люди всегда забывают об этом: когда вы пишете код, вы являетесь _guest_ на компьютере конечного пользователя. –

+0

Согласовано. Неплохо подмечено. Обновит мой ответ. –

+0

...: thumbsup: ... –