2015-01-27 4 views
7

मैं सी ++ में एक एल्गोरिथ्म (main.cpp) है और मैं Clion का उपयोग संकलन और इसे चलाने के लिए। एल्गोरिथ्म पाठ फ़ाइल से तार पढ़ा होगा, लेकिन वहाँ एक गलती है:सी ++ में एक फ़ाइल खोलने की कोशिश कर रहा है, लेकिन फाइल नहीं पाया जा सकता है

data.txt खोला नहीं जा सका (फ़ाइल मौजूद है और main.cpp के साथ एक फ़ोल्डर में रखा)

मैं इसे कैसे ठीक कर सकते हैं और इस फ़ाइल को CLion के लिए "दृश्यमान" बनाओ?

उत्तर

4

यदि आप fopen का उपयोग कर रहे हैं या कुछ समान हैं और बस "data.txt" पास कर रहे हैं, तो यह माना जाता है कि वह फ़ाइल चल रहे प्रोग्राम की वर्तमान कार्य निर्देशिका में है (जिसे आपने अभी संकलित किया है)।

तो, या तो

  1. एक पूर्ण पथ के बजाय दो, fopen("/full/path/to/data.txt"), जहाँ आप वास्तविक पूर्ण पथ

  2. (बेहतर नहीं) का उपयोग की तरह, निर्देशिका के लिए data.txt ले जाएँ जहाँ Clion चलाता है इसके संकलित कार्यक्रम से।

char buf[1024]; // hack, but fine for this 
printf("%s\n", getcwd(buf, 1024)); 
2

मैं इस समस्या को हल करने के लिए एक और रास्ता मिल गया (# 2 के लिए, यहाँ है कि निर्देशिका पाने के लिए एक hacky तरीका है)।

@Lou फ्रैंको का समाधान परियोजना संरचना को प्रभावित कर सकता है। उदाहरण के लिए, यदि मैं किसी सर्वर पर कोड को तैनात करता हूं, तो मुझे संसाधन फ़ाइल को विशिष्ट निर्देशिका में ले जाना चाहिए।

मैं ऐसा क्या CmakeLists.txt, संशोधित विंडोज पर, एक CMake चर का उपयोग कर

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "D:\\science\\code\\English-Prediction") 

CMAKE_RUNTIME_OUTPUT_DIRECTORY है, यह Clion काम निर्देशिका के काम निर्देशिका प्रदान करती है।

1
  1. विन्यास भागो/संपादित करें ...
  2. आपके आवेदन (विंडो के lefthandside पर) का चयन करें
  3. निर्दिष्ट कार्य निर्देशिका
  4. लागू

अब आप fopen काम कर अपेक्षाकृत से कर सकते हैं निर्देशिका।

+0

यह मेरे लिए काम करता है। धन्यवाद – pyetti

0

CMAKE_RUNTIME_OUTPUT_DIRECTORY सीएमकेलिस्ट चर के साथ जारी रखते हुए, मैं निम्नलिखित करता हूं। मेरी परियोजना की मूल निर्देशिका में, मैं एक निर्देशिका बनाते हैं, उदाहरण के लिए, out।फिर, मेरे CMakeLists.txt में मुझे लगता है कि निर्देशिका में CMAKE_RUNTIME_OUTPUT_DIRECTORY सेट:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/out) 

ध्यान दें, कि इससे पहले कि आप

add_executable(YourProject ${SOURCE_FILES}) 

है आना चाहिए मैं भी है कि जोड़ सकते हैं बजाय fopen() का उपयोग कर के मैं इसे और अधिक वस्तु रहेंगे std::ifstream का उपयोग करके केंद्रित:

std::ifstream inFile("data.txt"); 
// check if it opened without issue... 
if (!inFile) { 
    processError(); // a user-defined function to deal with the issue 
} else { 
    // All is good, carry on... 
    // and when you're done don't forget 
    inFile.close(); 
} 
संबंधित मुद्दे

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