2011-03-21 11 views
12

सी ++ का उपयोग करके, मुझे यह पता लगाने की आवश्यकता है कि दिया गया पथ (फ़ाइल नाम) पूर्ण या सापेक्ष है या नहीं। मैं विंडोज एपीआई का उपयोग कर सकता हूं, लेकिन बूस्ट जैसे थर्ड-पार्टी लाइब्रेरीज़ का उपयोग नहीं करना चाहता, क्योंकि मुझे प्रयोगात्मक निर्भरताओं के बिना छोटे विंडोज एप्लिकेशन में इस समाधान की आवश्यकता है।पता लगाएं कि पथ पूर्ण या रिश्तेदार है

+5

बधाई (http://msdn.microsoft.com/en-us/library/bb773660%28v=vs.85%29.aspx)। –

+2

@ टोमालक गेरेकल - आपका प्रयास "अधिक प्रयास नहीं कर रहा" में क्या है? वैसे भी, वही लिंक पहले से ही उत्तर के रूप में पोस्ट किया गया है, मैं वास्तव में आपके प्रयास, धन्यवाद, दोस्त की सराहना करता हूं। –

+0

@AlexFarber: उनका मुद्दा यह है कि यदि आपने कोशिश की तो एक Google खोज आपको सही जगह पर ले जाती। –

उत्तर

20

विंडोज एपीआई में PathIsRelative है। यह रूप में परिभाषित किया गया है:

BOOL PathIsRelative(
    _In_ LPCTSTR lpszPath 
); 
+0

हम्म। मैंने थोड़ा सा किया। –

+2

@ लाइटनेसरेसेसिन ऑर्बिट: हालांकि यह 99% बार काम करेगा, यह एक सही समाधान नहीं है। यहां दो प्रमुख कारण हैं: 1. तकनीकी रूप से तीन रिटर्न विकल्प होना चाहिए: 'हां', 'नहीं', और 'त्रुटि निर्धारण'। 2. यह सीमा: अधिकतम लंबाई MAX_PATH'। दुर्भाग्य से मुझे एक विंडोज एपीआई नहीं मिला जो यह विश्वसनीय रूप से कर सकता है ... – ahmd0

2

की शुरुआत के साथ सी ++ 14/सी ++ 17 आप filesystem library

#include <filesystem> // C++17 (or Microsoft-specific implementation in C++14) 

std::string winPathString = "C:/tmp"; 
std::filesystem::path path(winPathString); // Construct the path from a string. 
if (path.is_absolute()) { 
    // Arriving here if winPathString = "C:/tmp". 
} 
if (path.is_relative()) { 
    // Arriving here if winPathString = "". 
    // Arriving here if winPathString = "tmp". 
    // Arriving here in windows if winPathString = "/tmp". (see quote below) 
} 

पथ से is_absolute() और is_relative() उपयोग कर सकते हैं "/" एक पर निरपेक्ष है POSIX ओएस, लेकिन विंडोज पर सापेक्ष है।

सी ++ 14 उपयोग में std::experimental::filesystem

#include <experimental/filesystem> // C++14 

std::experimental::filesystem::path path(winPathString); // Construct the path from a string. 
0

मैं 1.63 को बढ़ावा देने की है और VS2010 (C++ पूर्व C++ 11), और निम्नलिखित कोड काम करता है। पर [अपने शोध में काफी प्रयास डाल नहीं]

std::filesystem::path path(winPathString); // Construct the path from a string. 
if (path.is_absolute()) { 
    // Arriving here if winPathString = "C:/tmp". 
} 
संबंधित मुद्दे