2012-05-07 11 views
6

के तहत एनटीएफएस वैकल्पिक डेटा स्ट्रीम लिखना और पढ़ना मैं उन डेटाबेस फ़ाइलों के संदर्भ में कुछ सिंक्रनाइज़ेशन जानकारी संग्रहीत करने के लिए वैकल्पिक डेटा स्ट्रीम का उपयोग करने में सक्षम होना चाहता हूं जो कि मैं बना रहा हूं।वर्किंग सी # उदाहरण: Win7 64 बिट

हालांकि, वेब पर जो भी दृष्टिकोण मिला है वह एक तरफ या किसी अन्य में विफल रहा है। Win32 API प्रोग्रामिंग में अनुभव नहीं किया जा रहा है मुझे यकीन नहीं है कि विफलताओं क्यों हो रही हैं। कुछ मामलों में विधि कॉल सफल होने के लिए प्रकट होते हैं, केवल कोई वैकल्पिक स्ट्रीम नहीं बनाई जाती है (यानी, मैं बाद में वैकल्पिक फ़ाइल से नहीं पढ़ सकता, न ही वैकल्पिक स्ट्रीम व्यूअर इसे देख सकता हूं)। अन्य मामलों में लेखन सफल होता है, लेकिन पढ़ना विफल रहता है क्योंकि CreateFile() को कॉल करना एक अवैध SafeFileHandle में परिणाम देता है।

इस बिंदु पर मैं कुछ कामकाजी कोड ढूंढना चाहता हूं। या सलाह दीजिये कि "यहां से नहीं जा सकता"। इस मामले में मैं एक और कम आकर्षक विकल्प का उपयोग करूंगा (उदाहरण के लिए, फ़ाइल नाम में सिंक/संदर्भ जानकारी को एन्कोड करें, और उम्मीद है कि कोई भी फ़ाइल नाम कभी नहीं बदलता है)।


मैं किस दृष्टिकोण के लिए अनुरोध की पुष्टि करता हूं। लेकिन वहां बहुत कुछ थे (मैंने इस पर घंटों बिताए), और मैं वास्तव में उन प्रस्तावों के बारे में सीखने में रूचि रखता था जिन्हें मैंने नहीं किया था।

हालांकि, आप सही हैं कि इससे मदद मिलेगी, क्योंकि यह पता चला है कि मैं दृष्टिकोणों में से एक का उपयोग कर रहा था - त्रिनत जिसे नीचे उल्लिखित किया गया है - गलत तरीके से। मुझे लगता है कि समस्या यह थी कि मैंने अभी तक "आधार" फ़ाइल नहीं बनाई है जिसके लिए मैं वैकल्पिक स्ट्रीम को सहेजने की कोशिश कर रहा था।

+0

http://stackoverflow.com/q/604960/102937 –

+0

दृष्टिकोण आप की कोशिश की के कुछ के लिए अपने प्रश्न लिंक में शामिल हैं, और क्यों वे विफल रही करें। अन्यथा, हम आपको एक ही असफल दृष्टिकोण के बारे में बता रहे हैं। –

उत्तर

5

मैं विंडोज 7 इस लाइब्रेरी का उपयोग कर 64 पर सफलता मिली है::

यहाँ मैं करने की कोशिश की कोड ठिकानों के लिंक हैं

https://github.com/hubkey/Trinet.Core.IO.Ntfs

मुझे अपना पुराना कोड नहीं मिल रहा है, और मैंने जिस दस्तावेज़ पृष्ठ को बुकमार्क किया है, वह इस समय नीचे है, इसलिए अगर आपको अभी भी समस्याएं आ रही हैं तो मैं कुछ कोड पोस्ट करने का प्रयास करूंगा।

संपादित करें:

using Trinet.Core.IO.Ntfs; 

var fileInfo = new FileInfo(@"C:\path\to\file.dat"); 
if (AlternateDataStreamExists("MyStreamName")) 
{ 
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenRead(); 
} 
else 
{ 
    var alternateStream = fileInfo.GetAlternateDataStream("MyStreamName").OpenWrite(); 
} 
+1

यह केवल इतना आसान है जब आप जानते हैं कि यह कैसे करें :) धन्यवाद, एविल पेंगुइन! मैंने ट्रिनेट समाधान की कोशिश की थी, लेकिन गलत दृष्टिकोण का उपयोग किया क्योंकि कोडप्रोजेक्ट उदाहरण लिखा गया था क्योंकि लाइब्रेरी बदल गई है। इसके अलावा, मैं "बेस" फ़ाइल बनाने से पहले वैकल्पिक स्ट्रीम बना रहा था, जो समस्याग्रस्त हो सकता है। किसी भी घटना में, अब यह काम करता है! –

+0

मुझे अभी एहसास हुआ कि यह बिट कैसे पढ़ा जाता है :) खुशी है कि मैं मदद कर सकता हूं। – TheEvilPenguin

2

तुम भी जो सूची का समर्थन करता है, पढ़ने और कोड के कुछ ही लाइनों में NTFS वैकल्पिक डेटा स्ट्रीम लिख मेरी Platform.VirtualFileSystem पुस्तकालय की कोशिश कर सकते हैं: जाहिर है यह रूप में सरल है।

https://github.com/platformdotnet/Platform.VirtualFileSystem/wiki https://github.com/platformdotnet/Platform.VirtualFileSystem/wiki/Alternate-Data-Streams

+0

आपकी लाइब्रेरी "\\? \" वैकल्पिक वाक्यविन्यास का उपयोग करते समय लंबाई> 260 के साथ पथ का समर्थन करती है। ट्रिनेट की लाइब्रेरी बस उस पर असफल हो जाती है। –

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