2011-02-07 12 views
20

MSDN का कहना है कि FileStream.Flush(True) "भी सभी मध्यवर्ती फ़ाइल बफ़र्स साफ करता है।"।FileStream.Flush() और FileStream.Flush (True) के बीच क्या अंतर है?

क्या "सभी मध्यवर्ती फ़ाइल बफ़र्स" वास्तव में क्या मतलब है?

+1

नोट एमएस बग रिपोर्ट के कुछ शर्तों के तहत फ्लश (सत्य) टूट गया है http://connect.microsoft.com/VisualStudio/feedback/details/634385/filestream-flush-flushtodisk-true-call-does-not-flush -इस-बफ़र्स डिस्क # विवरण। एमएस ने इसे ठीक किया है, लेकिन यह नहीं कहेंगे कि .NET संस्करण में यह तय किया गया है। – jimvfr

+0

किसी भी शब्द को .NET के इस संस्करण में किस बग में तय किया गया है? – BaltoStar

उत्तर

23

यह फ़ाइल डेटा है कि फाइल सिस्टम कैश में बफ़र है डिस्क के लिए लिखा जा कारण बनता है। डिस्क लिखने वाले सिर की स्थिति के आधार पर वह डेटा आम तौर पर आलसी लिखा जाता है। कैश किए गए डेटा का गीगाबाइट तकनीकी रूप से संभव है इसलिए इसमें कुछ समय लग सकता है। यदि यह आपके लिए महत्वपूर्ण है तो इसके बजाय FileOptions.WriteThrough विकल्प पर विचार करें। यह पूरी तरह से लेखन कैशिंग अक्षम करता है। यह बहुत महंगा हो सकता है; आप पाएंगे कि हार्ड डिस्क वास्तव में कितनी धीमी है।

0

इस फाइल करने के लिए बफर फ्लश करने के लिए एक अतिरिक्त फोन करना होगा:

Win32Native.FlushFileBuffers(this._handle); 
+2

क्या एमएस कार्यान्वयन से स्रोत कोड पोस्ट करना ठीक है? (इस तथ्य के बावजूद कि मुझे लगता है कि यहां पूरा कोड उत्तर में मूल्य नहीं जोड़ता है) –

+1

मैंने रिवर्स इंजीनियर को परावर्तक का उपयोग किया। इसके साथ कुछ भी अवैध नहीं है। – Aliostad

+1

पोस्टिंग स्रोत कोड - इस पर मेटा पर बहुत चर्चा की गई है। उदाहरण के लिए http://meta.stackexchange.com/questions/74890/is-it-inappropriate-to-post-decompiled-code-from-the-net-bcl और http://meta.stackexchange.com/questions/ 20153/पोस्टिंग-कोड-से-रिफ्लेक्टर – bic

4

जब आप Flush() या Flush(false), FileStream कॉल "फ़ाइल में कोई डेटा पहले से बफर करने के लिए लिखा गया है और करने के लिए प्रतियां बफर को साफ करता है (सिवाय इसके एन्कोडर राज्य के लिए) "। यहां बफर का मतलब FileStream वर्ग का आंतरिक बफर है। और फ़ाइल में कॉपी करना डिस्क पर डेटा नहीं लिख रहा है। यह सिर्फ ओएस को डेटा पास कर रहा है।

लेकिन, विंडोज ओएस में आईओ आपरेशन भी बफ़र कर रहे हैं - जब तक कि प्रणाली यह करने के लिए तैयार हो जाएगा डिस्क पर डेटा लेखन स्थगित किया जा सकता है। तो, सभी इंटरमीडिएट बफर को साफ़ करने से डिस्क पर buffered डेटा लिखना लागू होता है। यहां बफर का अर्थ विंडोज आंतरिक बफर [फाइल सिस्टम कैश] है।

BTW आप पास फ़ाइल, सभी बफ़र डेटा डिस्क को स्वचालित रूप से लिखा जाएगा जब। इसलिए, आपको केवल तभी सामान की आवश्यकता है यदि फ़ाइल हैंडल बंद होने से पहले आपको फ़्लश करने के लिए डेटा की आवश्यकता हो।

+0

'फ़ाइलस्ट्रीम' में कोई "एन्कोडर स्थिति" नहीं है, यह बाइट्स लेता है - वर्ण नहीं - और उन्हें डिस्क से/डिस्क में स्थानांतरित करता है। क्या आप शायद 'स्ट्रीमवाइटर' के बारे में सोच रहे थे? –

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