2013-03-22 78 views
4

我正在嘗試使用ifstream處理一些文件。一切看起來都很好,但是當我嘗試打開一個文件時,它不起作用。無論我是否嘗試輸入字符串變量或字符串文字作爲名稱。我嘗試訪問的文件與項目位於同一目錄中,並且包含內容。ifstream在Xcode中不起作用?

該項目不顯示任何錯誤,並將編譯,但它只會說它不能每次訪問該文件。

附加標題「simpio.h」和「console.h」只是斯坦福提供的庫。

#include <iostream> 
#include "console.h" 
#include "simpio.h" 
#include <fstream> 
#include <string> 
using namespace std; 

int countLines(ifstream & in) 
{ 
    int count = 0; 
    while (true) { 
     string line; 
     getline(in, line); 
     if (in.fail()) break; 
     count++; 
    } 
    return count; 
} 

int main() 
{ 
    ifstream in; 
    while (true) { 
     cout << "Enter name: "; 
     string s = getLine(); 
     in.open(s.c_str()); 
     if (!in.fail()) break; 
     cout << "Couldn't open file, try again!" << endl; 
     in.clear(); 
    } 



    cout << "Num lines = " << countLines(in) << endl; 

    return 0; 
} 

任何幫助將是偉大的!謝謝!

+0

您是否在與您要查找的文件相同的目錄中啓動該程序? – 2013-03-22 17:27:04

+0

你是什麼意思?程序和所有文件都在同一個項目文件夾中。 – Jonathan 2013-03-22 17:28:24

+2

'ifstream'在Xcode中肯定不起作用。它可以在標準庫,程序等中使用。類提供的功能僅取決於類,而不取決於IDE,天氣或鄰居貓的當前情緒...... – 2013-03-22 17:29:18

回答

3

你有兩個選擇:

1)使用的Objective-C++(除去.M擴展,並與.mm更換)

2)轉到項目設置並添加這些值:

GLIBCXX_DEBUG=1 
GLIBCXXDEBUGPEDANTIC=1 

在預處理器宏中。

舊X碼: image http://img541.imageshack.us/img541/2034/screenshot20100414at101.png! 較新的Xcode:

image

示例代碼:只要你建立和運行很快

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main(int argc, const char * argv[]) 
{ 
    ofstream myfile; 
    myfile.open ("/Developer/afile.txt"); 
     if(!myfile) 
     { 
     std::cout << "ERROR" std::endl; 
     }  
    myfile << "Writing this to a file.\n"; 
    myfile.close(); 
    return 0; 
} 
+0

我去了那個地區,這個領域已經是空白了。所以我甚至沒有東西要刪除。有任何想法嗎? – Jonathan 2013-03-22 17:46:28

+0

是的抱歉,我輸入錯誤,你必須添加它們(它說多個值或謊言) – Jona 2013-03-22 17:51:42

+0

我無法訪問該宏字段編輯/插入您提供的文本。爲了使它工作,我需要做什麼特別的事情? – Jonathan 2013-03-22 18:31:02

2

如果你不想與在Xcode什麼亂七八糟的,擔心你可能會打破一些其他的設置,做到這一點您的控制檯程序或應用程序,通常位於項目佈局左側的文件列表中,找到「Projects」目錄,右鍵單擊或選擇單擊並選擇「在Finder中顯示」。這是Xcode在每次爲特定項目運行時轉儲您的構建的地方。每個工作區都有自己的構建文件夾。你應該找到你在那裏選擇或創建的文件,如果你想添加自己的文件,只需拖動它,然後你可以從你的控制檯或應用程序調用它:myfile.open(「file.txt」);

或者只是更改項目的工作目錄並使用該文件夾,該文件夾可能比/ Developer/Gibberish/Build/Debug/whatever更容易訪問。

這使得將代碼移植到Win32或其他系統變得很容易,至少對我來說它已經是了。