বাইট [] অ্যারে কি সি # তে কোনও ফাইল লেখা যেতে পারে?


344

আমি একটি Byte[]অ্যারে একটি ফাইলের মধ্যে একটি সম্পূর্ণ ফাইল প্রতিনিধিত্ব করে লিখতে চেষ্টা করছি ।

ক্লায়েন্টের কাছ থেকে আসল ফাইলটি টিসিপি এর মাধ্যমে প্রেরণ করা হয় এবং তারপরে একটি সার্ভার দ্বারা প্রাপ্ত হয়। প্রাপ্ত স্ট্রিমটি বাইট অ্যারেতে পড়ে এবং তারপরে এই শ্রেণীর দ্বারা প্রক্রিয়াজাতকরণের জন্য প্রেরণ করা হয়।

এটি মূলত TCPClientপরবর্তী স্ট্রিমের জন্য প্রাপ্তি প্রস্তুত কিনা তা নিশ্চিত করার জন্য এবং প্রসেসিংয়ের প্রান্তটি থেকে প্রাপ্তির শেষটিকে পৃথক করে।

FileStreamবর্গ একটি আর্গুমেন্ট বা অন্য স্ট্রিম বস্তু (যা আপনি এটি বাইট লিখতে অনুমতি দেয় না) হিসাবে একটি বাইট অ্যারের নেয় না।

আমি লক্ষ্য করছি প্রসেসিংটি মূল থেকে আলাদা থ্রেডের (টিসিপি ক্লায়েন্ট সহ একটি) দ্বারা সম্পন্ন করা।

আমি কীভাবে এটি বাস্তবায়ন করতে জানি না, আমার কী চেষ্টা করা উচিত?

উত্তর:


728

প্রশ্নের প্রথম বাক্যের ভিত্তিতে: "আমি কোনও বাইট [] অ্যারে একটি ফাইলের মধ্যে একটি সম্পূর্ণ ফাইলের প্রতিনিধিত্ব করে লেখার চেষ্টা করছি " "

সর্বনিম্ন প্রতিরোধের পথটি হ'ল:

File.WriteAllBytes(string path, byte[] bytes)

এখানে দলিলযুক্ত:

System.IO.File.WriteAllBytes - এমএসডিএন


40

আপনি একটি BinaryWriterঅবজেক্ট ব্যবহার করতে পারেন ।

protected bool SaveData(string FileName, byte[] Data)
{
    BinaryWriter Writer = null;
    string Name = @"C:\temp\yourfile.name";

    try
    {
        // Create a new stream to write to the file
        Writer = new BinaryWriter(File.OpenWrite(Name));

        // Writer raw data                
        Writer.Write(Data);
        Writer.Flush();
        Writer.Close();
    }
    catch 
    {
        //...
        return false;
    }

    return true;
}

সম্পাদনা: ওফস, finallyঅংশটি ভুলে গেছেন ... এটি পাঠকের অনুশীলন হিসাবে ছেড়ে দেওয়া যাক ;-)


বলি, আমি সংকুচিত ডেটা পেয়েছি এবং আমি এটি বাইটে সংক্ষেপিত করেছি []। উপরের ফাংশনটি ব্যবহার করে ফাইলটি আবার তৈরি করা সম্ভব? কোন টিউটোরিয়াল বা অনলাইন ডেমো?
কামান

@ বাফার_ওভারফ্লো: আপনি যদি আসল ফাইলটি ফিরে পেতে চান তবে আপনাকে প্রথমে এটি সঙ্কলন করতে হবে। সম্ভাব্য প্রয়োগের জন্য ডেকোরেটর প্যাটার্নটি দেখুন: en.wikedia.org/wiki/Decorator_
ট্রেব

2
BinaryWriterনিষ্পত্তিযোগ্য তাই সম্ভবত একটি usingব্লকের মধ্যে ব্যবহার করা উচিত । এর অর্থ হ'ল আপনি সম্ভবত কিছু অতিরিক্ত কল ছেড়ে দিতে পারেন যেহেতু উত্স কোডটি দেখায় যে এটি নিষ্পত্তি করার সময় কিছুটা সাফ করে।
জেফ বি


11

System.IO.BinaryWriterএকটি স্ট্রিম লাগে এমনটি ব্যবহার করে আপনি এটি করতে পারেন:

var bw = new BinaryWriter(File.Open("path",FileMode.OpenOrCreate);
bw.Write(byteArray);

7
শুধু যুক্ত করতে চান, লেখার পরে যোগ করুন bw.flush এবং bw.close
ডেকদেব

6
@dekdev: ডেকে কোনো লাভ নেই Flush()সামনে Close()যেমন Close()ফ্লাশ হবে। এমনকি এমন একটি usingধারা ব্যবহার করা আরও ভাল যা এটি বন্ধ করে দেবে।
টমাস

1
ডিসপোজ ব্যবহার করতে ভুলবেন না;
ভিজিটর_গডেনসিও_লিভিরা

9

আপনি ব্যবহার করতে পারেন এটিকে লেখার ফাইলস্ট্রিম.উরাইট (বাইট [] অ্যারে, ইন্ট অফসেট, ইন কাউন্ট) পদ্ধতিটি ব্যবহার করতে পারেন।

আপনার অ্যারের নাম যদি "আমারআরে" হয় তবে কোডটি হবে।

myStream.Write(myArray, 0, myArray.count);


1

বাইনারিআডার চেষ্টা করুন:

/// <summary>
/// Convert the Binary AnyFile to Byte[] format
/// </summary>
/// <param name="image"></param>
/// <returns></returns>
public static byte[] ConvertANYFileToBytes(HttpPostedFileBase image)
{
    byte[] imageBytes = null;
    BinaryReader reader = new BinaryReader(image.InputStream);
    imageBytes = reader.ReadBytes((int)image.ContentLength);
    return imageBytes;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.