C++

2009-05-09 12 views
11

में अपने पूर्ण पथ से फ़ाइल खोलें, मैं चाहता हूं कि उपयोगकर्ता मुझे पूरा पथ दे, जहां फ़ाइल मौजूद है, न केवल फ़ाइल का नाम। मैं इस तरह फाइल कैसे खोलूं?C++

ifstream file; 
file.open("C:/Demo.txt", ios::in); 

यह काम करने के लिए प्रतीत नहीं होता:

यह कुछ इस तरह है।

+1

आप यह काम नहीं करता कैसे जानते हो? यह निश्चित रूप से करना चाहिए। –

+1

वह/एक होना चाहिए \ –

+2

@DanielEarwicker आप गलत हैं, यह सही है। यदि आप इसे किसी भी रूप में परिवर्तित करना चाहते हैं, तो आपको इसे \\ not \ –

उत्तर

10

आप fstream कक्षाओं के साथ एक पूर्ण पथ का उपयोग कर सकते हैं। फोल्डिंग कोड सी: ड्राइव की रूट में फ़ाइल demo.txt खोलने का प्रयास करता है। ध्यान दें कि चूंकि यह एक इनपुट ऑपरेशन है, फ़ाइल पहले से मौजूद होनी चाहिए।

#include <fstream> 
#include <iostream> 
using namespace std; 

int main() { 
    ifstream ifs("c:/demo.txt");  // note no mode needed 
    if (! ifs.is_open()) {     
     cout <<" Failed to open" << endl; 
    } 
    else { 
     cout <<"Opened OK" << endl; 
    } 
} 

यह कोड आपके सिस्टम पर क्या उत्पादित करता है?

14

आम तौर पर विंडोज में पथ विभाजक के रूप में बैकस्लैश वर्ण का उपयोग करता है। तो:

ifstream file; 
file.open("C:\\Demo.txt", ios::in); 

ध्यान रखें कि जब सी ++ स्रोत कोड में लिखा है, आप डबल बैकस्लैश का उपयोग करना चाहिए रखें बैकस्लैश चरित्र ही कुछ डबल उद्धृत तार के अंदर विशेष अर्थ है क्योंकि। तो उपर्युक्त फ़ाइल C:\Demo.txt को संदर्भित करता है।

+0

में परिवर्तित करना चाहिए सभी विंडोज कंपाइलर्स जिन्हें मैं फ़ाइल नामों में आगे स्लैश के उपयोग के समर्थन के बारे में जानता हूं, और इसका उपयोग पोर्टेबिलिटी के लिए बैकस्लैश के वरीयता में किया जाना चाहिए । –

+11

Win32 पथों के लिए या तो "\" या "/" का समर्थन करता है, जब तक आप पथ कैनोनिकलिसेशन ("\\? \" से शुरू होने वाले पथ) को बाईपास नहीं कर रहे हैं। Http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx – Richard

+2

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

2

कोड मुझे काम करने लगता है। मुझे लगता है कि @Iothar के साथ ही।

यह देखने के लिए जांचें कि क्या आप आवश्यक शीर्षलेख शामिल करते हैं, संकलित करने के लिए। यदि यह संकलित किया गया है, तो यह देखने के लिए जांचें कि क्या ऐसी फ़ाइल है, और सब कुछ, नाम इत्यादि, मैचों, और यह भी देखने के लिए जांचें कि आपको फ़ाइल को पढ़ने का अधिकार है।

एक क्रॉस की जांच करने के लिए, यदि आप इसे fopen के साथ खोल सकते हैं जाँच ..

FILE *f = fopen("C:/Demo.txt", "r"); 
if (f) 
    printf("fopen success\n"); 
1

जो लोग पथ dynamicly हो रही है के लिए ... जैसे खींचें & ड्रॉप:

void removeCharsFromString(string &str, char* charsToRemove) { 
    for (unsigned int i = 0; i < strlen(charsToRemove); ++i) { 
     str.erase(remove(str.begin(), str.end(), charsToRemove[i]), str.end()); 
    } 
} 

string myAbsolutepath; //fill with your absolute path 
removeCharsFromString(myAbsolutepath, "\""); 
:

"C:\MyPath\MyFile.txt" 

त्वरित और अच्छा समाधान स्ट्रिंग से वर्ण दूर करने के लिए इस सुविधा का उपयोग करने के लिए है:

कुछ मुख्य निर्माण पाने खींचें & तरह दोहरे उद्धरण चिह्नों के साथ फाइल गिरा

myAbsolutepath में अभी C:\MyPath\MyFile.txt

शामिल है

फ़ंक्शन को इन पुस्तकालयों की आवश्यकता है: <iostream><algorithm><cstring>
फ़ंक्शन this answer पर आधारित था।

कार्य फिडल:http://ideone.com/XOROjq