हम एक नए प्रकार के एप्लिकेशन के बारे में बात कर रहे हैं जो नए विंडोज 8 ऑपरेटिंग सिस्टम और नए स्टार्ट मेनू के लिए डिज़ाइन किए गए हैं।

मैं तुरंत ध्यान देना चाहता हूं कि नीचे लिखी हर चीज के बावजूद - मुझे तकनीक पसंद है, लेकिन माइक्रोसॉफ्ट का पारंपरिक दृष्टिकोण - "सब कुछ अच्छा करने के लिए, लेकिन सबसे अधिक इस्तेमाल किया जाने वाला कुछ बुरा है" - इसकी सभी महिमा में देखा गया है।
यदि आपने WPF या सिल्वरलाइट के लिए प्रोग्राम किया है, तो WinRT (मेट्रो) एप्लिकेशन बनाना - इंटरफ़ेस की प्रोग्रामिंग के मामले में - आपके लिए कोई कठिनाइयों का कारण नहीं होगा। इसके अलावा - अलग नए नियंत्रण इंटरफेस के डिजाइन को बहुत सरल करते हैं, लेकिन इसके
बारे में कुछ
उपयोगी पुस्तक पढ़ना बेहतर
है ।
सभी नुकसान अलग हैं।
सबसे पहले, आप कंप्यूटर पर किसी भी फ़ोल्डर और फ़ाइलों तक पूरी तरह से पहुंच के बारे में सुरक्षित रूप से भूल सकते हैं कि जिस उपयोगकर्ता के पास आपका प्रोग्राम चल रहा है, उसके अधिकारों तक पहुंच होगी। हां, भले ही वह प्रशासक ही क्यों न हो। और हाँ! एक और आश्चर्य की बात है कि मेट्रो अनुप्रयोगों के लिए यूएसी काम नहीं करता है। इस अर्थ में - कि यह अब केवल नियमित (पुराने) अनुप्रयोगों के लिए है।
दूसरा वाला। कंप्यूटर पर फ़ाइलों के साथ काम करना अभी भी संभव है, लेकिन कठिनाइयों के बिना नहीं। विशेष रूप से, आपके आवेदन में निम्नलिखित स्थानों तक पहुंच हो सकती है:
- पुस्तकालय: दस्तावेज, वीडियो, चित्र, संगीत
- उपयोगकर्ता डाउनलोड फ़ोल्डर
- उपयोगकर्ता प्रोफ़ाइल में एप्लिकेशन फ़ोल्डर
- वह फ़ोल्डर जहां आपका एप्लिकेशन इंस्टॉल किया गया था
- वह फ़ोल्डर / फ़ाइल जिसे उपयोगकर्ता ने आपके साथ साझा किया है
तो, चलो बिंदुओं पर शुरू करते हैं।
1. पुस्तकालय।
विस्टा में वापस दिखाई देने वाली इस अजीब बात को याद रखें, लेकिन लगभग कोई भी इस्तेमाल नहीं करता है?
(ठीक है, कम से कम मैं निश्चित रूप से इसका उपयोग नहीं करता हूं - सुदूर से यह किसी भी तरह पूरी तरह से असहज है)ख़ुश हो जाओ! अब आप उन्हें इस्तेमाल करना पसंद करेंगे।
मानक अनुप्रयोग संगीत, वीडियो, फ़ोटो केवल पुस्तकालयों के साथ काम करते हैं। यद्यपि, बेशक, आप वहां कोई भी फ़ाइल खोल सकते हैं, लेकिन यदि आप अनुप्रयोगों से स्वयं ऐसा करते हैं, तो यह असुविधाजनक है, और यदि आप एक्सप्लोरर के माध्यम से खोलते हैं, तो ठीक है, यह खोजकर्ता है, यह अपने आप में असुविधाजनक है।

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

आपको यह पता लगाने की आवश्यकता नहीं है कि लाइब्रेरी के फ़ोल्डर कहाँ स्थित हैं - आप उन्हें
KnownFolders वर्ग के माध्यम से एक्सेस कर सकते हैं
2. फ़ोल्डर "डाउनलोड" उपयोगकर्ता
खैर, सब कुछ सरल है - केवल पहुंच लिखें। आप उपयोगकर्ता के हस्तक्षेप के बिना एक फ़ाइल बना सकते हैं और वहां कुछ लिख सकते हैं।
3. उपयोगकर्ता प्रोफ़ाइल में एप्लिकेशन फ़ोल्डर
हमारे पास दो फ़ोल्डर हैं: स्थानीय और रोमिंग। एक वर्तमान कंप्यूटर पर निहित है, दूसरा चलता है यदि उपयोगकर्ता प्रोफ़ाइल को केंद्र में संग्रहीत किया जाता है, उदाहरण के लिए, एक डोमेन नियंत्रक पर। सामान्य तौर पर, सब कुछ पहले जैसा होता है (फ़ोल्डर C: \ Users \ "उपयोगकर्ता” \ AppData \ Subfolders of Local और रोमिंग देखें), अब केवल आपके एप्लिकेशन में ही इन फ़ोल्डरों तक पहुंच है।
4. वह फ़ोल्डर जहां आपका एप्लिकेशन इंस्टॉल किया गया था
आपके एप्लिकेशन की किसी भी फ़ाइल / फ़ोल्डर तक पूरी पहुंच है और वह जो चाहे कर सकता है।
5. वह फ़ोल्डर / फ़ाइल जिसे उपयोगकर्ता ने आपको एक्सेस दी है
और अब, वास्तव में, सबसे दिलचस्प।
किसी फ़ोल्डर / फ़ाइल को प्राप्त करने का एकमात्र तरीका जो ऊपर सूचीबद्ध स्थानों में नहीं है, केवल
FolderPicker और
FilePicker कक्षाओं के उपयोग के माध्यम से है।
यह इस प्रकार किया जाता है:
FolderPicker fp = new FolderPicker(); fp.ViewMode = PickerViewMode.Thumbnail; fp.FileTypeFilter.Add(".jpg"); StorageFolder folder = await fp.PickSingleFolderAsync(); if (folder == null) return; var files = await folder.GetFilesAsync(); foreach(var file in files) …;
जिसके बाद उपयोगकर्ता को ऐसी विंडो दिखाई देगी:

और आपको चयनित उपयोगकर्ता तक पूर्ण पहुंच प्राप्त होती है।
वैसे,
क्या आपने एसिंक्स / वेट का नोटिस
किया है ?
इसकी आदत डालें - कोई अधिक समकालिक कार्य नहीं हैं। ठीक है, कम से कम उन है कि सबसे अधिक बार आवश्यक हैं। उदाहरण के लिए, यदि पहले आप प्रपत्र की एक पंक्ति वाली फ़ाइल से डेटा पढ़ सकते थे:
string[] lines = File.ReadAllLines("filename.txt");
अब यह कुछ इस तरह होगा:
IList<string> lines = await ReadFileAsync("filename.txt");
वैसे, आश्चर्य - MessageBox अब नहीं है :) अब फिर से यह कुछ इस तरह होगा:
await ShowMessage(“”);
और यहाँ हम एक और समस्या को देखते हैं: प्रतीक्षित केवल async चिह्नित कार्यों में इस्तेमाल किया जा सकता है। स्वाभाविक रूप से, प्रत्येक फ़ंक्शन को इस तरह चिह्नित नहीं किया जा सकता है।
इस मामले में, यह सभी आवश्यक कोड को एक अलग फ़ंक्शन में डालने में मदद करता है, और फिर हमें इसके पूरा होने की प्रतीक्षा करने के लिए सही जगह पर है:
public async Task<object> MyAsyncFunction() { return await …; } public MySyncFunction() { var res=MyAsyncFunction(); res.Wait(); if(res.Result==...) ...; }
हालांकि, ऐसे कोड कभी-कभी हैंग हो जाते हैं, लेकिन क्रैश नहीं होते हैं। इसलिए, इसे डीबग करना एक खुशी है।
निष्कर्ष
जैसा कि मैंने ऊपर लिखा है - सामान्य तौर पर, प्रौद्योगिकी दिलचस्प है, हालांकि, यदि आपका एप्लिकेशन डिस्क पर फ़ाइलों के साथ सक्रिय रूप से काम करना चाहता है, और यहां तक कि उपयोगकर्ता से गुप्त भी है, तो यह आपकी पसंद नहीं है। लेकिन एक ऐसा एप्लिकेशन बनाने के लिए जो इंटरनेट से किटियों को डाउनलोड और ड्रा करेगा, आप सचमुच कीबोर्ड को छूने के बिना कर सकते हैं