2009-04-28 16 views
7

मैं SO पर यहां ifstream प्रश्नों पर रहा हूं और मुझे अभी भी एक साधारण टेक्स्ट फ़ाइल पढ़ने में परेशानी हो रही है।ifstream :: विजुअल स्टूडियो डीबग मोड में काम नहीं कर रहा

// CPPFileIO.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <fstream> 
#include <conio.h> 
#include <iostream> 
#include <string> 

using namespace std; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 

    ifstream infile; 
    infile.open("input.txt", ifstream::in); 

    if (infile.is_open()) 
    { 
     while (infile.good()) 
      cout << (char) infile.get(); 
    } 
    else 
    { 
     cout << "Unable to open file."; 
    } 
    infile.close(); 
    _getch(); 
    return 0; 
} 

मैं पुष्टि की है कि input.txt फ़ाइल argv[0] का मूल्य की जाँच करके सही "कार्यशील निर्देशिका" में है: मैं दृश्य स्टूडियो के साथ काम कर रहा हूँ 2008

यहाँ मेरी कोड है। ओपन विधि बस काम नहीं करेगा।

मुझे भी डिबगिंग में परेशानी हो रही है- क्या मुझे infile.good() या infile.is_open() पर घड़ी सेट करने में सक्षम नहीं होना चाहिए? मैं बार आ रही है

Error: member function not present. 

संपादित करें: अपडेट किया गया कोड .cpp फ़ाइल से पूर्ण कोड के साथ लिस्टिंग।

अद्यतन: फ़ाइल वर्तमान कार्य निर्देशिका में नहीं थी। यह वह निर्देशिका है जहां प्रोजेक्ट फ़ाइल स्थित है। इसे वहां ले जाया गया और यह VS.NET में डिबगिंग करते समय काम करता है।

+0

इसकी समस्या है जो आपकी समस्या है। व्हील आप इसे कमांड लाइन से चलाते हैं, कार्यशील निर्देशिका स्पष्ट है। जब आप इसे डीबगर में चलाते हैं तो आपको स्पष्ट रूप से कार्यशील निर्देशिका सेट करने की आवश्यकता होती है अन्यथा यह इतना स्पष्ट नहीं है (डीबगर विकल्प जांचें)। –

+0

अद्यतन खंड पोस्ट करने के लिए धन्यवाद। यह एक मिनट हो गया था क्योंकि मुझे इस बारे में सोचना था कि कामकाजी निर्देशिका डीबग मोड में कहां है। मुझे सिर खरोंच के कुछ मिनट बचाया। –

उत्तर

8

ओपन मोड निर्दिष्ट करते समय bitwise या ऑपरेटर का उपयोग करने का प्रयास करें।

infile.open ("input.txt", ios::ate | ios::in); 

openmode पैरामीटर एक बिटमास्क है। ios::ate को संलग्न करने के लिए फ़ाइल खोलने के लिए उपयोग किया जाता है, और ios::in इनपुट पढ़ने के लिए फ़ाइल खोलने के लिए उपयोग किया जाता है।

तुम सिर्फ फ़ाइल को पढ़ने के लिए चाहते हैं, तो आप शायद अभी उपयोग कर सकते हैं: तो तुम इस बात का पूरी तरह छुटकारा पा सकते हैं

infile.open ("input.txt", ios::in); 

एक ifstream के लिए डिफ़ॉल्ट खुला मोड, ios है :: में अभी व। निम्न कोड g ++ का उपयोग कर मेरे लिए काम कर रहा है।

#include <iostream> 
#include <fstream> 
#include <cstdio> 

using namespace std; 

int main(int argc, char** argv) { 
    ifstream infile; 
    infile.open ("input.txt"); 

    if (infile) 
    { 
     while (infile.good()) 
      cout << (char) infile.get(); 
    } 
    else 
    { 
     cout << "Unable to open file."; 
    } 
    infile.close(); 
    getchar(); 
    return 0; 
} 
+0

हे। कभी-कभी मैं चाहता हूं कि मेरा प्रतिनिधि किसी और के लिए उत्तर स्वीकार करने के लिए पर्याप्त था। :-) –

+0

अभी भी कोई भाग्य नहीं :( मैंने देखा कि मेरे पास "ifstream" के बजाय "infile" को "fstream" था। मैंने आईओएस को हटा दिया: खाया। खुली विधि अभी भी काम नहीं कर रही है। –

+0

विचित्र! जब मैं डीबग करता हूं तो काम नहीं करता है, लेकिन जब मैं कमांड लाइन से डीबग .exe चलाता हूं तो यह पूरी तरह से काम करता है! कोई विचार क्यों? –

0
infile.open ("input.txt", ios::ate || ios::in); 

|| तार्किक या ऑपरेटर है, नहीं बिटवाइज़ ऑपरेटर (के रूप में विधेयक Lizzard कहा)।

तो मैं लगता है कि आप के बराबर कर रहे हैं:

infile.open ("input.txt", true); 

(न ios संभालने :: खा लिया या ios :: में 0 कर रहे हैं)

0

उपयोग करके देखें:

ifstream fStm("input.txt", ios::ate | ios::in); 

I'm also having trouble debugging- should I not be able to set a watch on "infile.good()" or "infile.is_open()"? I keep getting "Error: member function not present."

और उचित में शामिल हैं:

#include <fstream> 

इत्यादि।

+0

मेरे पास मेरी सीपीपी फ़ाइल में # शामिल है। –

+0

आपको अपनी दूसरी समस्या को ठीक करने के लिए हमें पूरी फ़ाइल दिखाने की आवश्यकता है। बीटीडब्ल्यू, क्या आप फ़ाइल में पढ़ने में सक्षम थे? – dirkgently

+0

पूर्ण कोड के साथ अपडेट किया गया। –

1

मैं अपने कोड में दो समस्याओं मिल गया है: में

क) सिंटैक्स त्रुटि "ios :: || ios :: खाया में" => होना चाहिए "ios :: खा लिया | ios :: में"

ख) "ios :: खा लिया" फ़ाइल के अंत के लिए कर्सर सेट - तो आप कुछ भी नहीं मिलता है जब आप पढ़

तो बस हटाने "ios :: खा लिया" शुरू करने और आप ठीक :)

हैं

सीओओ, क्रिस

4

कभी-कभी विजुअल स्टूडियो आपके exe फ़ाइल को आपके स्रोत कोड से दूर रखता है। डिफ़ॉल्ट रूप से वीएस केवल आपकी exe फ़ाइल से शुरू होने वाली फ़ाइल की तलाश कर सकता है। यह प्रक्रिया आपके स्रोत कोड के समान निर्देशिका से इनपुट txt फ़ाइल प्राप्त करने के लिए एक आसान कदम है। क्या आप अपना आईडीई सेटअप ठीक नहीं करना चाहते हैं।

using namespace std; 

ifstream infile; 

string path = __FILE__; //gets source code path, include file name 
path = path.substr(0,1+path.find_last_of('\\')); //removes file name 
path+= "input.txt"; //adds input file to path 

infile.open(path); 

उम्मीद है कि यह अन्य लोगों को त्वरित समाधान के लिए सहायता करता है। इस सेटअप को स्वयं ढूंढने में मुझे कुछ समय लगा।

संबंधित मुद्दे