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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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
      47.984
    • Total de Posts
      411.588
×
×
  • Criar Novo...