मैं एक परियोजना पर काम कर रहा हूं कि मुझे सी # में फ़ाइल सामग्री से सुरक्षित पासवर्ड के साथ ज़िप बनाने की आवश्यकता है।

इससे पहले कि मैं gzip सामग्री बनाने के लिए System.IO.Compression.GZipStream का उपयोग करूं। क्या .net में ज़िप या rar पासवर्ड से सुरक्षित फ़ाइल बनाने के लिए कोई कार्यक्षमता है?

17
Hamed_gibago 4 मई 2016, 09:48

4 जवाब

सबसे बढ़िया उत्तर

DotNetZip पर एक नज़र डालें (@AFract ने टिप्पणियों में GitHub के लिए एक नया लिंक दिया है)

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

8
Jan18101997 29 जिंदा 2020, 12:24
मैंने इसे डाउनलोड किया है लेकिन मेरे प्रोजेक्ट में उपयोग करने के लिए डाउनलोड में एक डीएलएल नहीं मिल रहा है।
 – 
Paul
10 जुलाई 2018, 16:36
क्या यह अभी भी बनाए रखा जा रहा है? मूल परियोजना का एक जीथब कांटा है लेकिन मैं अक्सर इस तरह की परियोजनाओं की स्थिति के बारे में अनिश्चित हूं क्योंकि कोडप्लेक्स बंद हो गया है
 – 
StayOnTarget
8 अगस्त 2018, 17:47
2
nuget.org/packages/DotNetZip 'अंतिम अपडेट 3 महीने पहले' मुझे लगता है कि यह अभी भी कायम है .
 – 
Jan18101997
9 अगस्त 2018, 08:36
नगेट पैकेज के लिए गीथब रिपोजिटरी : github.com/haf/DotNetZip.Semverd को न देखें कोडप्लेक्स, यह (जाहिर है) अप्रचलित है क्योंकि कोडप्लेक्स मर चुका है।
 – 
AFract
27 जिंदा 2020, 12:20
कृपया उदाहरण प्रदान करें
 – 
Demodave
30 अप्रैल 2020, 19:28

दुर्भाग्य से ढांचे में ऐसी कोई कार्यक्षमता नहीं है। ज़िप फ़ाइलें बनाने का एक तरीका है, लेकिन पासवर्ड के बिना। अगर आप C# में पासवर्ड से सुरक्षित ज़िप फ़ाइलें बनाना चाहते हैं, तो मैं SevenZipSharp का सुझाव दूंगा। यह मूल रूप से 7-ज़िप के लिए एक प्रबंधित आवरण है।

SevenZipBase.SetLibraryPath(Path.Combine(
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? Environment.CurrentDirectory,
        "7za.dll"));

SevenZipCompressor compressor = new SevenZipCompressor();

compressor.Compressing += Compressor_Compressing;
compressor.FileCompressionStarted += Compressor_FileCompressionStarted;
compressor.CompressionFinished += Compressor_CompressionFinished;

string password = @"whatever";
string destinationFile = @"C:\Temp\whatever.zip";
string[] sourceFiles = Directory.GetFiles(@"C:\Temp\YourFiles\");

if (String.IsNullOrWhiteSpace(password))
{
    compressor.CompressFiles(destinationFile, sourceFiles);
}
else
{
    //optional
    compressor.EncryptHeaders = true;
    compressor.CompressFilesEncrypted(destinationFile, password, sourceFiles);
}
4
Manfred Radlwimmer 4 मई 2016, 09:57
दुर्भाग्य से यह समाधान केवल विंडोज़ है क्योंकि यह 7za.dll पर निर्भर करता है। अन्य समाधान क्रॉस प्लेटफॉर्म पर काम करते हैं।
 – 
frankhommers
4 सितंबर 2019, 17:01

मैं कुछ और विकल्प जोड़ना चाहता हूं।

.NET के लिए कोई SharpZipLib का उपयोग कर सकता है, Xamarin के लिए SharpZipLib.Portable

.NET के लिए उदाहरण:

using ICSharpCode.SharpZipLib.Zip;

// Compresses the supplied memory stream, naming it as zipEntryName, into a zip,
// which is returned as a memory stream or a byte array.
//
public MemoryStream CreateToMemoryStream(MemoryStream memStreamIn, string zipEntryName) {

    MemoryStream outputMemStream = new MemoryStream();
    ZipOutputStream zipStream = new ZipOutputStream(outputMemStream);

    zipStream.SetLevel(3); //0-9, 9 being the highest level of compression
    zipStream.Password = "Your password";

    ZipEntry newEntry = new ZipEntry(zipEntryName);
    newEntry.DateTime = DateTime.Now;

    zipStream.PutNextEntry(newEntry);

    StreamUtils.Copy(memStreamIn, zipStream, new byte[4096]);
    zipStream.CloseEntry();

    zipStream.IsStreamOwner = false;    // False stops the Close also Closing the underlying stream.
    zipStream.Close();          // Must finish the ZipOutputStream before using outputMemStream.

    outputMemStream.Position = 0;
    return outputMemStream;

    // Alternative outputs:
    // ToArray is the cleaner and easiest to use correctly with the penalty of duplicating allocated memory.
    byte[] byteArrayOut = outputMemStream.ToArray();

    // GetBuffer returns a raw buffer raw and so you need to account for the true length yourself.
    byte[] byteArrayOut = outputMemStream.GetBuffer();
    long len = outputMemStream.Length;
}

अधिक नमूने यहां देखे जा सकते हैं।

यदि आप पासवर्ड कार्यक्षमता के बिना रह सकते हैं, तो कोई ZipStorer या System.IO.Compression.

2
testing 18 जुलाई 2018, 14:54

DotNetZip ने साफ तरीके से बहुत अच्छा काम किया।

DotNetZip is a FAST, FREE cla-ss library and toolset for manipulating zip files.

कोड

static void Main(string[] args)
{
        using (ZipFile zip = new ZipFile())
        {

            zip.Password = "mypassword";

            zip.AddDirectory(@"C:\Test\Report_CCLF5\");
            zip.Save(@"C:\Test\Report_CCLF5_PartB.zip");
        }
 }
1
LCJ 14 पद 2020, 23:23