"स्वैप फ़ाइल नाम" का क्या अर्थ है? क्या आप फाइल सिस्टम, या सिर्फ अपने प्रोग्राम में चर के बारे में बात कर रहे हैं?
यदि आपका प्रोग्राम सी ++ है, और आपके पास तारों में दो फ़ाइल नाम हैं, और उन्हें स्वैप करना चाहते हैं, तो std :: swap का उपयोग करें।
std::string filenameA("somefilename");
std::string filenameB("othername");
std::swap(filenameA, filenameB);
std::cout << filenameA << std::endl; // prints "othername"
आप डिस्क पर दो फ़ाइलों है, और आप के नाम एक दूसरे के साथ सामग्री स्वैप करने के लिए चाहते हैं, तो नहीं, कोई रास्ता नहीं करने के लिए आसानी से कि करने के लिए, यदि आप: यह केवल प्रोग्राम में चर में परिवर्तन हार्ड लिंक को संरक्षित करना चाहते हैं। यदि आप सिर्फ "सुरक्षित बचत" करना चाहते हैं, तो यूनिक्स नाम बदलें() सिस्टम कॉल गंतव्य फ़ाइल को एक परमाणु संचालन में स्रोत फ़ाइल के साथ क्लॉबर करेगा (जैसा परमाणु के रूप में अंतर्निहित फाइल सिस्टम द्वारा समर्थित किया जा सकता है)।
std::string savename(filename);
savename += ".tmp";
... write data to savename ...
if (::rename(savename.c_str(), filename.c_str()) < 0) {
throw std::exception("oops!");
}
तुम सच में, वास्तव में डिस्क पर फ़ाइलों स्वैप (जैसे कि, एक बैकअप प्रतिलिपि रखने के लिए) की जरूरत है, तो कड़ी मेहनत से जोड़ने दर्ज करें: इस प्रकार, आप इस तरह सुरक्षित बचाने चाहते। नोट: हार्ड-लिंकिंग सभी फाइल सिस्टम (विशेष रूप से कुछ एसएमबी फ़ाइल शेयर) पर समर्थित नहीं है, इसलिए यदि आवश्यक हो तो आपको कुछ बैकअप लागू करने की आवश्यकता होगी। आपको एक अस्थायी फ़ाइल नाम की आवश्यकता होगी, लेकिन कोई अस्थायी डेटा स्टोर नहीं। जबकि आप इसे मैन्युअल रूप से लिंक() और अनलिंक() के साथ कार्यान्वित कर सकते हैं (याद रखें: फ़ाइलों में यूनिक्स में कई हार्ड लिंक हो सकते हैं), बस नाम बदलें() का उपयोग करना आसान है। हालांकि, आप पूरी तरह से परमाणु रूप से एक स्वैप नहीं कर सकते हैं।
::link(oldfile, tempfile);
::rename(newfile, oldfile);
::rename(tempfile, newfile);
आप लिंक के बाद दुर्घटना, तो आप में नए डेटा उपलब्ध हो जाए:
oldfile संभालने "filname.dat" और newfile कि "filename.dat.bak" क्या आप इस मिलेगा newfile, और oldfile और tempfile में पुराना डेटा। आप पहली बार नाम बदलने के बाद दुर्घटना, तो आप tempfile में oldfile में नया डेटा, और पुराने डेटा उपलब्ध हो (लेकिन newfile नहीं!)
क्या आप फ़ाइल नामों को स्वैप करके क्या मतलब है? फ़ाइल "ए" को "बी" और v.v. के रूप में नामित करना? – Kimvais
जस्ट स्वैपिंग फ़ाइल नामों के लिए कोई अंतर्निहित फ़ंक्शन नहीं है! जैसा कि आपने कहा था कि आप इसे एक शेल स्क्रिप्ट और एक अस्थायी चर द्वारा कर सकते हैं –
क्या आपके पास एक विशिष्ट कार्यान्वयन भाषा है, या आपको एक (खोल) कमांड की आवश्यकता है? किस प्रकार का विभाजन इस्तेमाल किया जा रहा है? (क्या एनएफएस पर काम करने की आवश्यकता है?) अस्थायी चर के साथ क्या गलत है? –