ফাইলটি বেস 64 স্ট্রিংয়ে রূপান্তর করা হচ্ছে এবং আবার ফিরে আসুন


108

শিরোনাম এটি সব বলছে:

  1. আমি তার মতো একটি tar.gz সংরক্ষণাগারে পড়েছি
  2. বাইটের অ্যারেতে ফাইলটি ভাঙ্গুন
  3. এই বাইটগুলি একটি বেস 64 স্ট্রিংয়ে রূপান্তর করুন
  4. সেই বেস 64 স্ট্রিংটিকে আবার বাইটের অ্যারে রূপান্তর করুন
  5. সেই নতুন বাইটগুলি আবার নতুন tar.gz ফাইলে লিখুন

আমি নিশ্চিত করতে পারি যে উভয় ফাইলই একই আকারের (নীচের পদ্ধতিটি সত্য ফিরে আসে) তবে আমি আর অনুলিপি সংস্করণটি বের করতে পারি না।

আমি কিছু অনুপস্থিত করছি?

Boolean MyMethod(){
    using (StreamReader sr = new StreamReader("C:\...\file.tar.gz")) {
        String AsString = sr.ReadToEnd();
        byte[] AsBytes = new byte[AsString.Length];
        Buffer.BlockCopy(AsString.ToCharArray(), 0, AsBytes, 0, AsBytes.Length);
        String AsBase64String = Convert.ToBase64String(AsBytes);

        byte[] tempBytes = Convert.FromBase64String(AsBase64String);
        File.WriteAllBytes(@"C:\...\file_copy.tar.gz", tempBytes);
    }
    FileInfo orig = new FileInfo("C:\...\file.tar.gz");
    FileInfo copy = new FileInfo("C:\...\file_copy.tar.gz");
    // Confirm that both original and copy file have the same number of bytes
    return (orig.Length) == (copy.Length);
}

সম্পাদনা: কাজের উদাহরণটি অনেক সহজ (@ টিএসএসকে ধন্যবাদ):

Boolean MyMethod(){
    byte[] AsBytes = File.ReadAllBytes(@"C:\...\file.tar.gz");
    String AsBase64String = Convert.ToBase64String(AsBytes);

    byte[] tempBytes = Convert.FromBase64String(AsBase64String);
    File.WriteAllBytes(@"C:\...\file_copy.tar.gz", tempBytes);

    FileInfo orig = new FileInfo(@"C:\...\file.tar.gz");
    FileInfo copy = new FileInfo(@"C:\...\file_copy.tar.gz");
    // Confirm that both original and copy file have the same number of bytes
    return (orig.Length) == (copy.Length);
}

ধন্যবাদ!


আপনি কেবল এমন একটি সংকোচিত ফাইলের সামগ্রী পরিবর্তন করতে পারবেন না। আপনাকে কেবল ফাইলটি সরাসরি যেমন পড়তে হবে তার পরিবর্তে ধাপ 1 এ ফাইলটি সঙ্কুচিত করতে হবে। এবং তারপর 5 ধাপে একইভাবে কেবল বাইটগুলি সরাসরি লেখার পরিবর্তে ডেটা পুনরায় সংক্ষেপণ করতে হবে।
itme86

সৌভাগ্যক্রমে, ফাইলটির নিজেই কোনও আসল হেরফের ছিল না (মূলত এটি কেবল বিন্দু A থেকে B এ সরিয়ে নিয়েছে) এই বিশেষ
টাস্কটির

উত্তর:


288

যদি আপনি কোনও কারণে আপনার ফাইলটিকে বেস-64 string স্ট্রিংয়ে রূপান্তর করতে চান। আপনি যদি ইন্টারনেট ইত্যাদির মাধ্যমে এটি পাস করতে চান তবে পছন্দ করুন ... আপনি এটি করতে পারেন

Byte[] bytes = File.ReadAllBytes("path");
String file = Convert.ToBase64String(bytes);

এবং অনুরূপভাবে, ফাইলে ফিরে পড়ুন:

Byte[] bytes = Convert.FromBase64String(b64Str);
File.WriteAllBytes(path, bytes);

তথ্যের জন্য থ্যাঙ্কিও, আমি নীচের উত্তরটি সাথে নিয়ে যাওয়ার চেষ্টা করেছি, তবে এটি
কোনও উপকারে

যদি টবেবেস 64 স্ট্রিং সিস্টেমটি দেয় .আউটআফ মেমরিএক্সেপশন? আপনি বড় ফাইল এবং সীমাবদ্ধ মেমরির জন্য কীভাবে অপ্টিমাইজ করবেন
ওরোরুনফেমি আজিবুলু

@ ওলরুনফেমি অজিবুলু তখন আমার সন্দেহ হয়, আপনার স্ট্রিম ব্যবহার করা দরকার। অথবা স্ট্রিং ভাঙ্গা ভাঙ্গা। একসময় আমি বড় ফাইলগুলির জন্য কাস্টম এনক্রিপশন লিখেছিলাম যেখানে আমরা এনক্রিপ্ট হওয়া খণ্ডগুলি সংরক্ষণ করেছি। খণ্ড আকারের জন্য পূর্ণসংখ্যার মান সংরক্ষণ করতে আমরা 4 বাইট যুক্ত করেছি। এইভাবে আমরা
টিএস

আকর্ষণীয় @ টেলরস্পার্ক। আমি স্ট্রিম ব্যবহার করেছি এবং আমি ভাল ছিলাম।
ওলরুনফেমি আজিবুলু

3
private String encodeFileToBase64Binary(File file){    
String encodedfile = null;  
try {  
    FileInputStream fileInputStreamReader = new FileInputStream(file);  
    byte[] bytes = new byte[(int)file.length()];
    fileInputStreamReader.read(bytes);  
    encodedfile = Base64.encodeBase64(bytes).toString();  
} catch (FileNotFoundException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
} catch (IOException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
}  
    return encodedfile;  
}

3
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে। মানের উত্তর সরবরাহ করার জন্য দয়া করে এই কীভাবে উত্তরটি পড়ুন।
ওয়েওওয়েওয়ের

1
কেন, আবার, আমাদের javaযদি ওপি ব্যবহার করে তবে প্রয়োজন c#?
টিএস

@ টিএস কেন, আবার আমাদের জাভা দরকার?
ওকে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.