অস্তিত্ব না থাকলে একটি .txt ফাইল তৈরি করুন এবং যদি এটি একটি নতুন লাইন সংযোজন করে


161

আমি একটি টেক্সট ফাইল তৈরি করতে এবং এটিতে লিখতে চাই এবং ফাইলটি ইতিমধ্যে উপস্থিত থাকলে আমি আরও কয়েকটি লাইন যুক্ত করতে চাই:

string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
    File.Create(path);
    TextWriter tw = new StreamWriter(path);
    tw.WriteLine("The very first line!");
    tw.Close();
}
else if (File.Exists(path))
{
    TextWriter tw = new StreamWriter(path);
    tw.WriteLine("The next line!");
    tw.Close(); 
}

তবে প্রথম লাইনটি সর্বদা ওভাররাইট হয়ে গেছে বলে মনে হচ্ছে ... আমি কীভাবে একই লাইনে লেখা এড়াতে পারি (আমি এটি লুপটিতে ব্যবহার করছি)?

আমি জানি এটি একটি খুব সাধারণ জিনিস, তবে আমি WriteLineআগে কখনও এই পদ্ধতিটি ব্যবহার করিনি। আমি সি # তে সম্পূর্ণ নতুন।


3
সাবধান যে এখানে প্রায় সমস্ত উত্তর ভুল এবং জাতি শর্ত সাপেক্ষে । মনে রাখবেন: if (file exists) { open file }সমস্ত প্রোগ্রামিং ভাষায় প্যাটার্নটি প্রায় সর্বদা ভুল! .NET এর জন্য সমাধানটি File.Open(path, FileMode.Append, FileAccess.ReadWrite)উপযুক্ত পতাকা সহ ব্যবহার করা।
কমফ্রিচ

"একটি ফাইলমোড মান যা একটি ফাইল উপস্থিত না থাকলে ফাইল তৈরি হয়েছে কিনা তা নির্দিষ্ট করে এবং বিদ্যমান ফাইলগুলির বিষয়বস্তু ধরে রাখা বা ওভাররাইট করা আছে কিনা তা নির্ধারণ করে।" এখানে ম্যানুয়াল পদ্ধতির পরিবর্তে। নেট দ্বারা একই কাজ। সুতরাং এটি এখানে ভুল নয়, এটি একই প্রক্রিয়াটি ম্যানুয়ালি করা হয়। আপনি অপ্রতুল বলতে পারেন তবে ভুল বললে গণনা হয় না।
বার্কার ইয়াসিয়ার

পার্থক্যটি হ'ল: File.Openঅভ্যন্তরীণভাবে একটি WinAPI ফাংশনে প্রতিনিধি (পরবর্তী মন্তব্য দেখুন) আশা করি রেসের শর্তটি রোধ করছে। এখানে বেশিরভাগ সমাধানগুলি এটি করে না এবং স্পষ্টতই বর্ণের শর্ত সাপেক্ষে।
কমফ্রিচ 21'19

1
অস্তিত্বের চেকটি ফাইলমোড দ্বারা নির্ধারিত হয়েছে Appএখানে যোগ করুন .. এবং এটি অস্তিত্ব চেকের দিকে নির্দেশ দেয় তারপরে ক্রিয়েটফিলিএ দিয়ে ফাইল তৈরি করে। তবুও ভুল কিছুটা চরম বলা, তবে আপনি অপ্রতুল বলতে পারেন। আমাদের এটিও ভুলে যাওয়া উচিত নয় যে অস্তিত্বের চেকটি কেবল লেখার / পড়ার অ্যাক্সেসের জন্যই ব্যবহার করা যেতে পারে না অন্য বিষয়গুলিও ব্যবহার করা যেতে পারে তাই নতুন সূচনাকারীদের ক্ষেত্রে এটি কীভাবে এটি কাজ করে তা বোঝার জন্য এই বিষয়টি কার্যকর। তবে আপনি যদি এখানে লিখেছেন এমন সমস্ত সংজ্ঞা এবং কারণটি কেন ভাল কারণ এটি উত্তর হিসাবে অনেক সাহায্য করবে এবং সম্ভবত সঠিক হিসাবে বেছে নেওয়া হবে তার সাথে যদি আপনি একটি উত্তর যুক্ত করতে পারেন।
বার্কার ইয়াসির

1
@ কমফ্রিক আমি দৃ strongly়ভাবে সম্মত হই যে এটিকে পরিষ্কারভাবে ব্যাখ্যা করার জন্য আপনার এ সম্পর্কে একটি সম্পূর্ণ উত্তর লেখা উচিত। মন্তব্যগুলি উত্তর দেওয়ার জন্য নয় এবং আমি এই বর্ণের পরিস্থিতি এবং আপনি কীভাবে এটি সমাধান করার প্রস্তাব দিচ্ছেন সে সম্পর্কে আমি আন্তরিকভাবে আগ্রহী।
ম্যাথিউউ ফল্টজার

উত্তর:


167

সঠিক নির্মাতা ব্যবহার করুন :

else if (File.Exists(path))
{
    using(var tw = new StreamWriter(path, true))
    {
        tw.WriteLine("The next line!");
    }
}

11
প্রথম উত্তর, সর্বাধিক সহজ উত্তর, সর্বাধিক দরকারী উত্তর আমার পক্ষে লওল। আমি যখন তাকালাম তখন আমার মতো ছিল: হু? শুধু "যোগ করা, সত্য" যথেষ্ট? এর আগে আমি কীভাবে দেখতে পাব? জঘন্য ... আমি সম্পূর্ণ বোবা ধন্যবাদ মত অনুভূত। আমি সত্যিই এই ধরনের ভাল উত্তর preciate।
বার্কার ইয়াসিয়ার

7
ইঙ্গিত: যদি ফাইলটি না থাকে তবে এই কনস্ট্রাক্টর একটি নতুন ফাইল তৈরি করে।
আবু-এমিশ

1
আমি একটি ব্যবহার করে মোড়ানো (নীচের উত্তর দেখুন)।
ডেভিড থিলেন


2
-1 এটি জাতি শর্ত সাপেক্ষে এবং ভুল আচরণ উত্পাদন করতে পারে! সম্ভবত File.Open(path, FileMode.Append, FileAccess.ReadWrite)প্রত্যাবর্তিত স্ট্রিমের মাধ্যমে ফাইলের আকারটি ব্যবহার এবং চেক করুন।
কমফ্রিচ

57
string path = @"E:\AppServ\Example.txt";
File.AppendAllLines(path, new [] { "The very first line!" });

ফাইল.এপেন্ডএলটেক্সট ()ও দেখুন। অ্যাপেন্ডএললাইনগুলি নিজেরাই সেখানে না রেখে প্রতিটি লাইনে একটি নতুন লাইন যুক্ত করবে।

উভয় পদ্ধতিই ফাইলটি তৈরি করে যদি এটি না থাকে তাই আপনার দরকার নেই।


3
আমি মনে করি এটি ব্যবহারকারী যা জিজ্ঞাসা করেছিল তার জন্য এটি আরও উপযুক্ত। 2 টি সমস্যা আছে বলে মনে হচ্ছে। 1 হ'ল পাঠ্যটি ওভাররাইট করা - এটি কারণ লেখনাইন ফাইলটি ওভার রাইটিং করে। এই ক্ষেত্রে, ফাইল.অপেন্ডএলটেক্সট আরও উপযুক্ত। এবং 2) - আমি কীভাবে আমার ফাইল তৈরি করতে পারি এবং আমি এটিতে যুক্ত হয়েছি তা কীভাবে তা প্রশ্ন। ফাইলটি জানা ভাল। অ্যাপেনডাল অ্যাল টেক্সট ফাইলটি তৈরি করে, এটি আমার প্রশ্ন। স্ট্রিম রাইটার সর্বদা উপযুক্ত নয়, এটি সেই অ্যাপ্লিকেশনটির জন্য ব্যবহৃত হয় তার উপর নির্ভর করে। যে কোনও ক্ষেত্রে এটি আমাকে সাহায্য করেছিল। +1
ডিভিন সি

42
string path=@"E:\AppServ\Example.txt";

if(!File.Exists(path))
{
   File.Create(path).Dispose();

   using( TextWriter tw = new StreamWriter(path))
   {
      tw.WriteLine("The very first line!");
   }

}    
else if (File.Exists(path))
{
   using(TextWriter tw = new StreamWriter(path))
   {
      tw.WriteLine("The next line!");
   }
}

আমারও একই সমস্যা রয়েছে এবং এই পোস্টারটি সন্ধান করুন তবে এখানে সমাধানগুলি আমার সমস্যার সমাধান করতে পারে না। সুতরাং আমি সমাধানের কয়েকটি টুকরোগুলি ব্যবহার করি এবং কেবল ডিসপোজ () যুক্ত করি My আমার লক্ষ্যটি অনুলিপি-পেস্টের সাথে জড়িত নয়।
Aek

1
আমি এটি করার পরামর্শ দিচ্ছি না; আমি বলছি যে আপনার উত্তরে এটি অন্তর্ভুক্ত না করে, আসল পোস্টারটি জানে না আপনি কেন পরিবর্তন করেছেন বা কী সম্পাদন করার কথা বলেছেন। আপনি যখন পোস্ট করেন তখন সর্বদা প্রাসঙ্গিক তথ্য অন্তর্ভুক্ত করুন, যাতে লোকেরা আপনাকে কী করছে তা সমস্ত জানতে পারে। :)
ডিমনো

1
এটি কাজ করে কারণ এটি একটি ত্রুটি দেয় না যা বলে যে আপনি নতুন তৈরি করা ফাইলটিতে লিখতে পারবেন না কারণ এটি অন্য প্রক্রিয়া দ্বারা ব্যবহৃত হচ্ছে। .Dispose () কী। তোমাকে অনেক ধন্যবাদ!
GenXisT

এটি কোনওভাবেই প্রশ্নটিকে লক্ষ্য করে না, যা বিদ্যমান বিষয়বস্তু সংরক্ষণের বিষয়ে।
বেন ভয়েগট

বিবৃতি Close()থেকে ফোন করার কোনও অর্থ নেই using, কারণ স্বয়ংক্রিয়ভাবে নিষ্পত্তি হওয়ার আগে সমস্ত সংস্থান বন্ধ হয়ে যাবে।
শেরিডান

21

আপনার ফাইলটি আসলে উপস্থিত আছে কিনা তা যাচাই করতে হবে না, যেহেতু স্ট্রিম রাইটার আপনার পক্ষে এটি করবে। আপনি যদি এটি অ্যাপেনড-মোডে খুলেন, ফাইলটি উপস্থিত না থাকলে তৈরি করা হবে, তবে আপনি সর্বদা সংযোজন করবেন এবং কখনই লিখবেন না। সুতরাং আপনার প্রাথমিক চেক অপ্রয়োজনীয়।

TextWriter tw = new StreamWriter(path, true);
tw.WriteLine("The next line!");
tw.Close(); 

1
আমি স্বীকৃত উত্তরের যুক্তি নিয়ে কাজ করার চেষ্টা করছিলাম, আমি জানতাম আমি এটি আগে একটি লাইনে করেছিলাম তবে সঠিক বাক্য গঠনটি মনে করতে পারি না। ধন্যবাদ.
মরভেল

14

ফাইল.এপেন্ডএলটেক্সট একটি ফাইলে একটি স্ট্রিং যুক্ত করে। ফাইলটি উপস্থিত না থাকলে এটি একটি পাঠ্য ফাইলও তৈরি করে। আপনার যদি সামগ্রী পড়ার দরকার না হয় তবে এটি খুব দক্ষ। ব্যবহারের ক্ষেত্রে লগিং হয়।

File.AppendAllText("C:\\log.txt", "hello world\n");

এটি কেবল আমার প্রয়োজন ছিল তবে আমি কীভাবে নতুন সামগ্রীটিকে নতুন লাইনে শুরু করতে পারি? আমি সিএসভি ফাইল ব্যবহার করছি।
নিলালুক

আমার ধারণা, এর কোনও সহজ সমাধান নেই। আমি আপনাকে এই পোস্টিং চেক আউট পরামর্শ দিতে হবে। stackoverflow.com/questions/1343044/...
R.Cha

6

আপনি কেবল "অ্যাপেন্ড" মোডে ফাইলটি খুলতে চান।

http://msdn.microsoft.com/en-us/library/3zc0w663.aspx


হ্যাঁ এটি খুব উপকারী তবে আমি একটি দ্রুত এবং সহজ সমাধানের সন্ধান করছিলাম এবং @ ড্যানিয়েল হিলগারথকে ধন্যবাদ জানালেন তিনি এই ধরনের দয়াল সমাধানটি দিয়েছেন। সুতরাং +1।
বার্কার ইয়াসিয়ার

3

আপনি যখন স্ট্রিম রাইটারটি শুরু করেন তখন পাঠ্যের আগে ওভাররাইড হয়। আপনি এ জাতীয় সংযোজন সম্পত্তি ব্যবহার করতে পারেন:

TextWriter t = new StreamWriter(path, true);

3
 else if (File.Exists(path)) 
{ 
  using (StreamWriter w = File.AppendText(path))
        {
            w.WriteLine("The next line!"); 
            w.Close();
        }
 } 

1
আপনার যদি 'ব্লক' ব্যবহার করা থাকে তবে ডাব্লু। ক্লোজটি অতিরিক্ত কাজ নয় ant ব্লক ব্যবহার শেষে শেষে নিষ্পত্তি একই কাজ করে।
মাইকেল ফ্রিজিম

-1 এটি জাতি শর্ত সাপেক্ষে এবং ভুল আচরণ উত্পাদন করতে পারে! সম্ভবত File.Open(path, FileMode.Append, FileAccess.ReadWrite)প্রত্যাবর্তিত স্ট্রিমের মাধ্যমে ফাইলের আকারটি ব্যবহার এবং চেক করুন।
কমফ্রিচ


2

এটা চেষ্টা কর.

string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
    using (var txtFile = File.AppendText(path))
    {
        txtFile.WriteLine("The very first line!");
    }
}
else if (File.Exists(path))
{     
    using (var txtFile = File.AppendText(path))
    {
        txtFile.WriteLine("The next line!");
    }
}

রিডুড্যান্ট File.AppendText(path)এবং এটির সাথে কোনও পরীক্ষা করার দরকার নেই File.Exists(path)। এবং If (not A) Else If (A)/ যদি অন্যথায় একটি অদ্ভুত। মূলত এই প্রশ্নের ভাল কোনও জিনিস নেই, এমন কোনও ব্যাখ্যা কোড যা অন্য উত্তরের একটি অপ্রয়োজনীয় সংস্করণ।
xdtTransfor

-1 এটি জাতি শর্ত সাপেক্ষে এবং ভুল আচরণ উত্পাদন করতে পারে! সম্ভবত File.Open(path, FileMode.Append, FileAccess.ReadWrite)প্রত্যাবর্তিত স্ট্রিমের মাধ্যমে ফাইলের আকারটি ব্যবহার এবং চেক করুন।
কমফ্রিচ

2

আপনি কেবল ফাইল.অপেনডএলটেক্সট () পদ্ধতিটি ব্যবহার করতে পারেন এটি আপনার সমস্যার সমাধান করবে। এই পদ্ধতিটি ফাইল না পাওয়া, ফাইলটি খোলার এবং বন্ধ না করে থাকলে ফাইল তৈরির যত্ন নেবে।

var outputPath = @"E:\Example.txt";
var data = "Example Data";
File.AppendAllText(outputPath, data);

1

মাইক্রোসফ্ট ডকুমেন্টেশন থেকে, আপনি উপস্থিত না থাকলে ফাইল তৈরি করতে পারেন এবং এটি একটি কল কল এ যুক্ত করতে পারেন App অ্যাপ্ল্যান্ডএলটেক্সট পদ্ধতি (স্ট্রিং, স্ট্রিং)

.NET ফ্রেমওয়ার্ক (বর্তমান সংস্করণ) অন্যান্য সংস্করণ

একটি ফাইল খোলে, ফাইলটিতে নির্দিষ্ট স্ট্রিং সংযোজন করে এবং তারপরে ফাইলটি বন্ধ করে দেয়। যদি ফাইলটি বিদ্যমান না থাকে তবে এই পদ্ধতিটি একটি ফাইল তৈরি করে, ফাইলটিতে নির্দিষ্ট স্ট্রিং লিখে, ফাইলটি বন্ধ করে দেয়। নেমস্পেস: সিস্টেম.আইও অ্যাসেমব্লি: এমএসএসসিআরএলিব

সিনট্যাক্স সি # সি ++ এফ # ভিবি পাবলিক স্ট্যাটিক অকার্যকর অ্যাপেন্ডেল অল টেক্সট (স্ট্রিং পাথ, স্ট্রিং সামগ্রী) পরামিতিগুলির পথ প্রকার: সিস্টেম.স্ট্রিং ফাইলটিতে নির্দিষ্ট স্ট্রিং যুক্ত করার জন্য। বিষয়বস্তুর প্রকার: সিস্টেম. স্ট্রিং ফাইলটিতে সংযুক্ত করার জন্য স্ট্রিং।

AppendAllText


1
using(var tw = new StreamWriter(path, File.Exists(path)))
{
    tw.WriteLine(message);
}

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