Olá pessoal!
Problema resolvido! Isto me foi explicado por Jim Wrenholt, da Nordic Software.
O que acontecia era basicamente que o compilador não lê os arquivos de texto do mesmo diretório dos arquivos dos códigos do projeto no Xcode. Então temos duas formas para resolver este problema:
1ª - Colocar o arquivo de texto na pasta padrão, que é bem escondidinha, mas vamos lá.
Quando você abre um projeto, na pasta do projeto - só acessível pelo Finder - é criada uma pasta chamada 'build', e dentro dela a pasta 'Release', onde ficam os arquivos executáveis, e os de texto. Assim se vc quiser usar um arquivo de texto no seu projeto, copie tal arquivo na pasta Release.
2ª - A outra forma é, via código, configurar o caminho para um diretório que vc queira usar. Esses scripts são do Jim Wrenholt (thanks dude!).
a) especificando um caminho no sistema:
#include
#include
using namespace std;
//------------------------------------------------------------------------------------------
void SetKnownPath()
{
// é necessário declarar um caminho válido!
//
std::string path("/Users/myname/Projects/MyProject");
chdir(path.c_str());
};
Alterar o caminho relativo do seu bundle atual
#include
#include
using namespace std;
void SetWorkingDir()
{
// this works by finding the current bundle and moving up folders to get to your project folder.
//
CFBundleRef mainBundle = CFBundleGetMainBundle();
// find the url of the current bundle.
CFURLRef pathURL = CFBundleCopyBundleURL(mainBundle);
// this is how project folders are set on my system.. your's may differ?
// back up relative to bundle "MyProject/build/Debug/"
// each ../ moves you up one level
CFURLRef destURL = CFURLCreateCopyAppendingPathComponent(kCFAllocatorDefault, pathURL, CFSTR("../../../"), true );
// convert from url to system representation of a path.
char path[PATH_MAX];
if (!CFURLGetFileSystemRepresentation(destURL, TRUE, (UInt8 *)path, PATH_MAX))
cerr
else
cout
// release the urls.
CFRelease(destURL);
CFRelease(pathURL);
// call the unix system to set the current working directory.
chdir(path);
};
Então basta usar essas funções no seu arquivo principal! por exemplo:
int main()
{
// SetKnownPath();
SetWorkingDir();
ofstream fout;
fout.open( "BOGUS_NAME.txt");
fout
fout.close();
cout
ifstream fin("BOGUS_NAME.txt");
if(!fin)
{
cout
}
else
{
cout
int x, y, z;
while(fin >> x >> y >> z){
cout
}
cout
fin.close();
}
return 0;
}
Eu preferi usar a resolução A, mas isso é de cada um...
abraços!
Paulo