2011-01-18 8 views
5

जब भी मैं fopen का उपयोग कर एक फ़ाइल बनाने के लिए प्रयास करते हैं, fopen कृत्यों फ़ाइल ठीक से खोल दिया गया है के रूप में अगर और यह उसकी पूर्ण एक्सेस है, लेकिन यह 'नहीं करता है वास्तव में फ़ाइल बनाते हैं। मेरे प्रोग्राम में सिस्टम रूट फ़ोल्डर में लेखन पहुंच नहीं है क्योंकि इसे वहां लिखने के लिए व्यवस्थापक पहुंच की आवश्यकता है, लेकिन fopen() क्यों कोई त्रुटि नहीं दे रहा है?fopen अदृश्य रूप में विफल रहता है

किसी भी विचार कैसे उसमें कोई त्रुटि है या नहीं करता है, तो बताने के लिए? फ़ाइल हैंडल जो लौटाई जाती है जब मैं एक सुरक्षित निर्देशिका में फ़ाइल खोलने की कोशिश कर रहा हूं, वही है जब मैं एक निर्देशिका में एक फ़ाइल खोलता हूं जहां मेरे पास लेखन पहुंच है।

मैं fopen के विभिन्न विभिन्न संस्करणों (fopen, _wfopen, _wfopen_s), लेकिन वे सभी एक ही उत्पादन के साथ इस कोशिश की है।

दिलचस्प बात यह GetLastError() ERROR_ALREADY_EXISTS देता है।

FILE *FileHandle; 
DWORD error = _wfopen_s(&FileHandle, L"\\filename.txt", L"a"); 
Win32Error = GetLastError(); 

if (error != 0 || FileHandle == NULL) 
{ 
    //Throw error 
} 
else 
{ 
    //write to file 
    //close file 
} 

संपादित करें:

यहाँ कोड है कि मैं का उपयोग कर रहा है के रूप में rerun ने कहा, फ़ाइल virtualization की वजह से% APPDATA% में बनाया जा रहा है। क्या कोई इस सुविधा को अक्षम करने के बारे में जानता है?

उत्तर

6

इस आभासी की दुकान से कोई लेना देना हो सकता है। कुछ जानकारी के लिए here पर एक नज़र डालें।

+0

यह निश्चित रूप से करता है। –

+0

वाह, हाँ, यही वह जगह है जहां लॉग समाप्त हो रहा था, धन्यवाद! कोई विचार कैसे फॉपेन को इसके बजाय त्रुटि फेंक सकता है? –

3

आप सचमुच कोड तुम्हें तैनात चला रहे हैं, तो आप सब पर रूट निर्देशिका में एक फ़ाइल के लिए पूछ नहीं कर रहे हैं। आपको इसके बजाय "c:\\filename.txt" (दो '\' अक्षर) जाने की आवश्यकता है। हो सकता है कि यदि आप वर्तमान निर्देशिका में देखते हैं तो आप पाएंगे कि आपने सफलतापूर्वक एक अजीब नामित फ़ाइल बनाई है (मूल रूप से <formfeed>ilename.txt, मुझे लगता है)।

+0

नहीं, यह मेरे प्रश्न में एक टाइपो था। मैंने इसे अपने वास्तविक कोड से अपडेट किया है। धन्यवाद –

2

हमें रजिस्ट्री वर्चुअलाइजेशन में एक ही समस्या थी, हां यह Vista के बाद वर्चुअलाइज्ड भी है।

हमारा समाधान गुण-> लिंकर-> प्रकटीकरण फ़ाइल-> यूएसी निष्पादन स्तर-> आवश्यकता प्रशासक। आईएमएचओ, यह आपके मामले के लिए भी काम कर सकता है।