Ir para conteúdo
  • Cadastre-se
Entre para seguir isso  
barbeirovsk

Erro ao abrir arquivo .txt em C++ com Xcode3

Posts Recomendados

Olá senhores,

Este é meu primeiro post nesta comunidade!

E já vou pedir um help. O problema que estou enfrentando é para abrir um arquivo .txt pelo C++, programando com o Xcode.

O trecho do código está assim:

using namespace std;

superficie::superficie()

{

cout

ifstream fin("pontos.txt");

if( !fin ) cout

else

{

cout

float x, y, z;

int i = 0;

while( fin >> x >> y >> z )

{

E ele me retorna "ERRO ao abrir o arquivo".

Desconfio que o problema esteja em alguma configuração do compilador, que talvez esteja buscando o arquivo pontos.txt em outra pasta. Mas não faço idéia de onde arrumar isso. Se alguém puder me ajudar... agradeço.

Estou usando um iMac Intel, Xcode3 e o Leopard.

Falow,

barbeirovsk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou sugerir vc trocar a extensao dele pra *.cpp

e ve se resolve.

e lembre-se que o XCode funciona bem diferente dos compiladores normais (dev-c, visual studio).

Nele vc nao só escreve int main () { return 0; } e ele compila.

Tem que dizer qual o alvo de compilação e etc. É melhor vc criar um projeto C++ no xcode (ele ja vai vir com uma pre-configuração) "helloWorld" e trocar pelo seu. Empty project. Nao deve ser facil configurar. Eu pelo menos, nunca consegui.

=]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem galera!

Eu resolvi o meu problema imediato, alterando meu código. Ao invés de abrir um arquivo eu criei um array.

Mas a dúvida persiste...

Eu peguei na net uns tutoriais sobre o tema (http://www.softlookup.com/tutorial/c++/ ... #Heading54)

e seguindo o tutorial, a coisa funcionou. Mas, quando eu uso o mesmo exemplo do tutorial para abrir um arquivo txt, ou cpp, dá erro!

Eu vou xeretar mais um pouco, e quando descobrir, posto aqui a solução.

Abras.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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());

};

B) 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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

Entre para seguir isso  

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.



  • Estatísticas do Fórum

    • Total de Tópicos
      50.235
    • Total de Posts
      425.371
×
×
  • Criar Novo...