c# - Spreadsheetgear.IWorkbook/workbook object. How Do I retrieve the length of the workbok? -


विकास प्लेटफार्म: .NET 2.0 प्लेटफार्म: एएसपी.NET स्प्रेडशीटियर: 2008 भाषा: सी #

वहां है

मैं दस्तावेज़ीकरण और सफलता के कई प्रयासों के माध्यम से गया।

मैं बचत कर रहा हूँ कार्यपुस्तिका को SaveToStream विधि का उपयोग कर जो कार्यपुस्तिका को सीधे पृष्ठ में भेज रहा है। Response.OutputStream जो तब ब्राउज़र से बाहर निकल गया है। लेकिन चूंकि इस ऑब्जेक्ट के प्रकार स्ट्रीम है, यह सार क्लास लंबाई की संपत्ति को लागू नहीं करता है और इसे बाल क्लास में ढालता है जैसे मेमोरीस्ट्रीम नल वापस करेगा। दोनों मामलों में ऐप एक अपवाद फेंकता है।

मुझे बाइट्स में लम्बी कब्जा करने की आवश्यकता है ताकि हमारे आवेदन में कार्यप्रदर्शन समीक्षा प्रयोजनों के लिए प्रवेश किया जा सके।

मेरा उद्देश्य बचाना है उस स्ट्रीम को किसी अन्य ऑब्जेक्ट की प्रतिलिपि बनाने और यदि केवल संदर्भ का उपयोग करके संभव हो तो हम मॉड्यूल के स्मृति पदचिह्न को अनुकूलित करने की आवश्यकता करते हैं जो एक्सेल स्प्रैडशीट्स को एक्सपोर्ट में निर्यात करता है।

यदि लंबाई की संपत्ति कार्यान्वित नहीं की जाती है, तो आप संपूर्ण स्ट्रीम को मेमोरीस्ट्रीम में कॉपी कर सकते हैं, उस की लंबाई प्राप्त करें, फिर स्ट्रीम को मेमोरी स्ट्रीम से भेजें।

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

  सार्वजनिक वर्ग लंबाई लागिंग स्ट्रीम: स्ट्रीम {निजी स्ट्रीम स्ट्रीम; सार्वजनिक लंबे कुलबाइट्स पढ़ें {get; निजी सेट; } सार्वजनिक लंबे कुलबाइट्स लिखित (प्राप्त करें; निजी सेट; } सार्वजनिक लैंगलिगिंग स्ट्रीम (स्ट्रीम स्ट्रीम) {this.stream = stream; } सार्वजनिक ओवरराइड बूल CanRead {get {return stream.CanRead; }} सार्वजनिक ओवरराइड बूल CanSeek {वापस {stream.CanSeek; }} सार्वजनिक ओवरराइड बूल कैन्र्राइट {रिटर्न स्ट्रीम। कैन्राइट; }} सार्वजनिक ओवरराइड शून्य फ्लश () {stream.Flush (); } सार्वजनिक ओवरराइड लंबी लंबाई {प्राप्त {रिटर्न स्ट्रीम। लांघ; }} सार्वजनिक ओवरराइड लम्बी स्थिति {प्राप्त करें {return stream.Position; } सेट {stream.Position = value; }} सार्वजनिक ओवरराइड इं पढ़ें (बाइट [] बफर, इंट ऑफ़सेट, इंट काउंट) {int bytesRead = stream.Read (बफर, ऑफसेट, गिनती); यदि (बाइट्स रीड & gt; 0) कुलबाइट्सरेड + = बाइट्स रीड; वापसी बाइट्स रीड; } सार्वजनिक ओवरराइड लंबे समय से सीक (लंबे ऑफसेट, सेक्ओग्रीन मूल) {रिटर्न स्ट्रीम। सीन (ऑफसेट, मूल); } सार्वजनिक ओवरराइड शून्य SetLength (लंबी मान) {stream.SetLength (मान); } सार्वजनिक ओवरराइड शून्य लिखें (बाइट [] बफर, इंट ऑफ़सेट, इंट काउंट) {TotalBytesWritten + = count; स्ट्रीम। लिखें (बफर, ऑफसेट, गिनती); }}  

आप इस वर्ग के साथ Response.OutputStream लपेट कर सकते हैं, इसे फ्लश कर सकते हैं, और फिर देखें कि कितने बाइट थे:

  lengthLoggingStream loggingstream = new LengthLoggingStream (Response.OutputStream); Workbook.SaveToStream (लॉगिंग स्ट्रीम, / * अन्य मापदंडों / /); लॉग इन करें ("बाइट्स लिखित:" + लॉगिंगस्ट्रीम शेडबाइट्स लिखित);  

Comments

Popular posts from this blog

c# - How to capture HTTP packet with SharpPcap -

jquery - SimpleModal Confirm fails to submit form -

php - Multiple Select with Explode: only returns the word "Array" -