2012-07-13 16 views
12

पर पूर्ण पथ दिए गए फॉपेन के साथ फ़ाइल खोलें, मैं एक प्रोग्राम बनाने की कोशिश कर रहा हूं जो फ़ाइल की लाइनों की संख्या की गणना करता है, जब मैं फॉपेन फ़ंक्शन के पूर्ण पथ को पार करने का प्रयास करता हूं, तो बस मुझे बताता है कि नहीं मिला, यहां मेरे कोड है:विंडोज

#include <iostream> 
#include <stdio.h> 
#include <stdlib.h> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    int i=0; 
    char array[100]; 

     char caracteres[100]; 
     FILE *archivo; 
     archivo = fopen("C:\Documents and Settings\juegos psps.txt","r"); 
     if (archivo == NULL){cout<<"Dont Work";} 
     while (feof(archivo) == 0) 
     { 
       fgets(caracteres,100,archivo); 
       i++; 
       } 
       cout << "Number of lines:" << i ; 
       return 0; 
} 

मैं कैसे ताकि आप फ़ाइल खोल सकते हैं मेरा कार्यक्रम का निरपेक्ष पथ से पारित करना चाहिए?

+0

कोशिश "C: \\ दस्तावेज़ और सेटिंग्स \\ juegos psps.txt" – Jeeva

+0

या '" C:/दस्तावेज़ और सेटिंग्स/juegos psps.txt "' है, जो भी काम करता है । –

उत्तर

17

उपयोग डबल स्लैश:

"C:\\Documents and Settings\\juegos psps.txt" 
+0

@SingerOfTheFail मैं पहले से ही कोशिश कर रहा हूं लेकिन अभी भी काम नहीं कर रहा हूं, मेरे ऑपरेटिंग सिस्टम के संस्करण पर निर्भर हो सकता है? मैं इस घंटे के साथ अटक गया हूँ। – franvergara66

+0

@ मेलखिया 66, आप किस ओएस के तहत अपना प्रोग्राम चला रहे हैं? साथ ही, क्या आप सुनिश्चित हैं कि फ़ाइल नाम में कोई टाइपो नहीं है (शायद अतिरिक्त स्थान की तरह)? – SingerOfTheFall

+0

@SingerOfTheFail Im कोड 7 ब्लॉक का उपयोग करके विंडोज 7 में प्रोग्राम चला रहा है, और फ़ाइल नाम – franvergara66

6

यह आमतौर पर काम नहीं कर रहा है क्योंकि संकलक अगले चरित्र के साथ एक शाब्दिक स्ट्रिंग में एक बैकस्लैश एक साथ परीक्षण करता है और उन सब में एक चरित्र के रूप में व्याख्या करता है। स्ट्रिंग अक्षर में ऐसे दो-चार अनुक्रमों को एस्केप अनुक्रम कहा जाता है।

दृश्यों \D और \j कुछ भी करने के लिए नक्शे नहीं है (\n जो न्यू लाइन चरित्र के लिए नक्शे के साथ इस विपरीत), और इस मामले में मानक का कहना है के रूप में यह चुनता है कि संकलक उन्हें व्याख्या कर सकते हैं।

archivo = fopen("C:Documents and Settingsjuegos psps.txt","r"); 

(आप अगर यह है कि आपके संकलक करता है परीक्षण करने के लिए इस नाम का एक फ़ाइल बनाने की कोशिश कर सकते): कुछ compilers बैकस्लैश है, जो अपने मामले में बराबर में परिणाम होगा की अनदेखी करने के लिए चुनते हैं। ताकि आप के रूप में

archivo = fopen("C:\\Documents and Settings\\juegos psps.txt","r"); 
+0

हाँ आदमी, मुझे वह पता है। समस्या यह है कि जब मैं पथ को डबल स्लैश डालता हूं जैसे कि मैं फ़ाइल नहीं खोल सकता और प्रोग्राम स्थिति में प्रवेश करता है (फ़ाइल == न्यूल) – franvergara66

+1

@ मेलखिया 66: फ़ाइल नाम सही तरीके से निर्दिष्ट होने पर कोड में कुछ भी गलत नहीं है, इसलिए आपको यह देखना चाहिए कि फ़ाइल वहां है, अनुमतियां इत्यादि। – Jon

1

यह लिखना चाहिए फ़ाइल नाम में रिक्त स्थान की जाँच करें

एक बैकस्लैश के लिए सही एस्केप अनुक्रम, एक डबल बैकस्लैश है। स्लेश ठीक से बच निकले थे, लेकिन रिक्त स्थान नहीं था।

प्रयास करें:

fopen("C:\\\\Documents\ and\ Settings\\\juegos psps.txt","r")

+0

कोई भी उत्तर के लिए कम से कम 2 प्रतिष्ठा का हकदार है जो बहुत अधिक नहीं है ... –

2

Windows और Linux पर के रूप में अच्छी तरह से काम करता है: / बजाय भागने बैकस्लैश \\

"C:/dir1/dir2/file.ext" 
-1

सब कोड और रास्तों को देखते हुए सही तरीके से लिखा जाता है, तो एक अन्य संभावित कारण यह है कि का कारण बनता है फॉपेन काम नहीं करता है आपकी परियोजना गुण-> सी/सी ++ कोड जनरेशन-> रनटाइम लाइब्रेरी डीबग बिल्ड के लिए/एमडीडी के बजाय/एमडी के लिए सेट है, यह सेटिंग प्रोजेक्ट से मेल खाती है विन्यास, XX डीबग

को XX (घ) जारी करने
0

एक नया फ़ोल्डर बना में कोड ब्लॉक परियोजना फ़ोल्डर में फ़ोल्डर

मुख्य और हेडर फाइल के बगल में नई फ़ाइल "exemple1" बनाने के लिए और उस में अपनी फ़ाइल डाल "file.txt", तो

string nom_fichier; 
nom_fichier = "exemple1/file.txt" ; 
fichier = fopen(nom_fichier.c_str(), "r+"); 
+0

हालांकि यह कोड प्रश्न का उत्तर दे सकता है, और क्यों और/या यह कोड प्रश्न का उत्तर कैसे देता है, यह दीर्घकालिक मूल्य में सुधार करता है। – rollstuhlfahrer