2017-04-10 7 views
13

std::filesystem सी ++ 17, और std::experimental::filesystem पर, boost::filesystem पर आधारित हैं और लगभग सभी नए std को बंदरगाह के लिए स्पष्ट हैं।सी ++ 17 को बढ़ावा देने के लिए समतुल्य :: फाइल सिस्टम :: unique_path() क्या है? कई प्री-सी ++ 17 कंपाइलर्स के लिए

लेकिन मुझे boost::filesystem::unique_path() के बराबर नहीं है।

क्या एसडीडी में समतुल्य है कि मैं ध्यान नहीं दे रहा हूं? या क्या कार्यान्वयन की नकल करने के लिए मुझे एक अनुशंसित दृष्टिकोण लेना चाहिए?

मैं वास्तव में जब मेरे कोड देखती है यह एक मंच है कि std::filesystem का समर्थन करता है पर संकलन है, और unique_path() केवल मेरे रूपांतरण की नहीं स्पष्ट हिस्सा है boost::filesystem निर्भरता को बदलने के लिए उम्मीद कर रहा हूँ।

उत्तर

1

जहां तक ​​मैं कह सकता हूं कि वास्तव में सी ++ 17 में कोई सटीक बराबर नहीं है।

आप वास्तव में वास्तव में क्या आप क्या करना चाहते निर्दिष्ट नहीं किया है, लेकिन आप std::filesystem::temp_directory_path के साथ एक इसी तरह की सुविधा है जो आप यादृच्छिक रूप से जनरेट फ़ाइल नाम के साथ जोड़ सकते हैं की नकल करने में सक्षम होना चाहिए अगर तुम सिर्फ एक अस्थायी फ़ाइल कहीं तो स्टोर करने के लिए की जरूरत है (जो आप like this कर सकते हैं, या यह तदनुसार संशोधित अगर आप boost::filesystem::unique_path() के रूप में ठीक उसी नामकरण प्रारूप की आवश्यकता होती है)

या यदि आपने अभी किसी भी अस्थायी फ़ाइल को स्टोर करने की जरूरत है, तो आप std::tmpfile उपयोग कर सकते हैं।

16

unique_path हटा दिया गया था क्योंकि यह मैलवेयर के लिए संभावित हमले वेक्टर था। unique_path पर कॉल करने और उस स्थान पर एक फ़ाइल खोलने के बीच अवसर की एक खिड़की है जिसके दौरान कुछ अन्य प्रक्रिया एक ही फाइल बना सकती है। उपयोगकर्ता फ़ाइल के साथ क्या करता है, इस पर निर्भर करता है कि यह सुरक्षा भेद्यता का गठन हो सकता है या नहीं। POSIX फ़ंक्शन tmpnam के साथ एक समान समस्या मौजूद है।

जैसा कि this discussion में उल्लेख किया गया है, इस मुद्दे को Filesystem लाइब्रेरी के अगले पुनरावृत्ति में निपटाया जाएगा। तब तक, आप या तो Boost.Filesystem का उपयोग जारी रख सकते हैं, <cstdio> में दिए गए std::tmpnam फ़ंक्शन का उपयोग करें या mkstemp जैसे सुरक्षित प्लेटफ़ॉर्म-विशिष्ट विकल्पों का उपयोग करें।

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