2011-11-18 9 views
5

से फ़ाइलों को हटा रहा है मुझे अपने सी कोड के अंदर कुछ सैकड़ों फाइलें निकालना है। मैं एक लूप में "निकालें" का उपयोग करता हूं। क्या "निकालें" का उपयोग करने से ऐसा करने का कोई तेज़ तरीका है? मैं यह पूछता हूं क्योंकि मैं "हटाने" का उपयोग करके वाइल्डचार्स नहीं दे सकता।सी कोड

+0

आप लूप के अंदर एक एलएस के परिणाम को पाइप क्यों नहीं करते हैं ताकि आपको सभी नाम – lc2817

+0

टाइप न करना पड़े, समस्या यह है कि उस निर्देशिका में 50000 फ़ाइलें हैं। जब आवश्यक हो तो मुझे उनमें से कुछ को हटाना होगा। "निकालें" मेरे लिए ठीक काम करता है लेकिन इसे समाप्त करने में कुछ समय लगता है। मैं कुछ तेज़ी से ढूंढ रहा हूं। मैं "सी" से खोल आदेशों को नहीं खोलना चाहता हूं अगर मैं इसे "सी" में भी कर सकता हूं। – Kitcha

+0

क्या आप पाइथन का उपयोग कर सकते हैं? :) – lc2817

उत्तर

10

नहीं, पॉसिक्स सिस्टम पर remove() - या unlink() का उपयोग करने से एक तेज तरीका नहीं है - एक लूप में।

सिस्टम rm कमांड कम से कम सरल, गैर-पुनरावर्ती मामले में जहां कमांड लाइन पर नाम दिए जाते हैं। खोल मेटाएक्टएक्टर्स का विस्तार करता है, और rm (इन) प्रसिद्ध रूप से कमांड लाइन पर उपयोग किए जाने वाले विनाशकारी *.* नोटेशन से अनजान है, इसे हटाने के लिए कहा जाता है। (पुनरावर्ती मामले में, यह एक समारोह में इस तरह के रूप में nftw() और उपयोग करता unlink() को गहराई-पहले के आदेश और बार-बार कॉल में निर्देशिका संरचना पार करने के लिए फ़ाइलों को दूर करने के लिए rmdir() (अब खाली) निर्देशिका हटाने के लिए।)

POSIX कार्य (glob() और wordexp()) प्रदान करता है ताकि मेटाएक्टेक्टर से फ़ाइल नामों की सूचियां उत्पन्न हो सकें (POSIX) खोल में, साथ ही fnmatch() यह देखने के लिए कि कोई नाम पैटर्न से मेल खाता है या नहीं।

+0

'*' * '' '' * के समान नहीं है, या क्या कुछ सूक्ष्म अंतर है? जब लोग 'आरएम' सर्वनाश का जिक्र करते हैं तो वे हमेशा '*। *' –

+0

विंडोज़ * * के तहत उपयोग करते हैं। * 'की आवश्यकता थी; यूनिक्स पर, '*' पर्याप्त है (वास्तव में, '*। *' से अधिक विनाशकारी सरल * * 'अधिक नामों से मेल खाता है)। मैंने मामूली रूप से बहस की जो उपयोग करने के लिए और (बेहतर या बदतर के लिए) '*। *' चुना। दोनों बुरी खबरें हैं। (और मैंने देखा है कि सबसे खराब 'आरएम' cataclysm रूट/'' के साथ बनाई गई एक अस्थायी उपयोगकर्ता के लिए खाते को हटा रहा था; 'उपयोगकर्ता को हटाएं' कमांड ने अपनी होम निर्देशिका के तहत सबकुछ हटा दिया। यह आश्चर्य की बात है कि कितनी देर तक महत्वपूर्ण फाइलों को खोने के बाद सिस्टम चलाया जा सकता है। सौभाग्य से, यह एक नया सिस्टम था और पहले दिन से बैकअप था।) –

+0

आपके इनपुट के लिए धन्यवाद। मैं बिना किसी मुद्दे के फ़ाइल नाम उत्पन्न कर सकता हूं। मेरी एकमात्र चिंता "हटाने" कमांड को तेजी से जारी कर रही थी। – Kitcha

0

आप एक खोल खोलने के लिए system का उपयोग कर सकते हैं जो आपके लिए * विस्तार करेगा। यह शायद लूप में अनलिंक() को कॉल करने से कहीं अधिक तेज नहीं होगा, हालांकि, इसे खोल खोलना होगा (एक नई प्रक्रिया शुरू करें)। लेकिन कोड करना आसान होगा।