2012-08-17 17 views
9

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

मैं इसे लिखने के बाद mkstemp या tmpfile पर कॉल करके rename पर कॉल करके इसका प्रयास कर रहा हूं। हालांकि, मुझे नाम बदलने के लिए फ़ाइल का पूरा पथ चाहिए, और स्पष्ट रूप से फ़ाइल डिस्क्रिप्टर (एमके सिस्टमपी द्वारा लौटाया गया) से फ़ाइल नाम प्राप्त करना या फ़ाइल * (tmpfile द्वारा लौटाया गया) कोई मामूली प्रक्रिया नहीं है। यह किया जा सकता है, लेकिन यह सुरुचिपूर्ण नहीं है।

क्या कोई सिस्टम कॉल है जो एक अस्थायी फ़ाइल बनाएगी और मुझे नाम प्रदान करेगी? मुझे mktemp और संबंधित कॉल के बारे में पता है, लेकिन वे या तो अद्वितीय होने की गारंटी नहीं है या बहिष्कृत हैं। या शायद अस्थायी फ़ाइलों को बनाने, लिखने और स्थानांतरित करने के लिए एक बेहतर तरीका है।

उत्तर

10

ऐसा लगता है कि mkstemp वास्तव में जाने का तरीका है।

int fd; 
char name[] = "/tmp/fileXXXXXX"; 
fd = mkstemp(name); 
/* Check fd. */ 

इस कॉल के बाद आप fd में एक वैध वर्णनकर्ता और name में जुड़े फ़ाइल का नाम है।

+0

आप सही हैं, और जब मैं दस्तावेज़ पढ़ता हूं तो मुझे और अधिक गहन होने की आवश्यकता होती है। मुझे ओसीडी कॉल करें, लेकिन मैंने [इस पोस्ट] पर जानकारी का उपयोग किया (http://stackoverflow.com/questions/4790471/how-can-i-get-the-temporary-directory-path-in-ubuntu) प्राप्त करने के लिए केवल हार्ड-कोडिंग "/ tmp" के बजाय अस्थायी फ़ोल्डर; – jorgander

+0

यदि आप/tmp/में फ़ाइल बना रहे हैं और फिर आप फ़ाइल को विशिष्ट स्थान पर स्थानांतरित करने की योजना बना रहे हैं, तो "/ home//फिर इसे सीपी या स्थानांतरित करने में लंबा समय लगेगा और यह भी सबसे खराब होगा यदि/tmp और/home/विभिन्न विभाजन क्षेत्र में थे; इसलिए बेहतर/home//fileXXXXX में फ़ाइल बनाएं और इसे/home//फ़ाइल पर नाम दें। – Viswesn

+0

अंतिम फ़ाइल नाम क्या है? –

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