.NET দিয়ে একটি নির্দিষ্ট এক্সটেনশান সহ আমি কীভাবে একটি টেম্প ফাইল তৈরি করতে পারি?


277

আমার একটি .csv এক্সটেনশান সহ একটি অনন্য অস্থায়ী ফাইল তৈরি করতে হবে।

আমি এখনই যা করি তা হ'ল

string filename = System.IO.Path.GetTempFileName().Replace(".tmp", ".csv");

তবে এটি আমার গ্যারান্টি দেয় না যে আমার .csv ফাইলটি অনন্য হয়ে উঠবে।

আমি জানি যে আমার কখনও সংঘর্ষের সম্ভাবনা খুব কম রয়েছে (বিশেষত আপনি যদি বিবেচনা করেন যে আমি .tmp ফাইলগুলি মুছি না) তবে এই কোডটি আমার কাছে ভাল লাগছে না।

অবশ্যই আমি ম্যানুয়ালি এলোমেলো ফাইলের নামগুলি তৈরি করতে পারি যতক্ষণ না অবশেষে আমি একটি অনন্য (যা কোনও সমস্যা হওয়া উচিত নয়) খুঁজে না পাওয়া যায়, তবে আমি জানতে আগ্রহী যে অন্যরা এই সমস্যাটি মোকাবেলার জন্য কোনও দুর্দান্ত উপায় খুঁজে পেয়েছে কিনা know


4
GetTempFileName সম্পর্কে কিছু সতর্কতা গেটটেম্পফিলনাম পদ্ধতিটি যদি কোনও পূর্ববর্তী অস্থায়ী ফাইলগুলি মোছা না করে 65535 টিরও বেশি ফাইল তৈরি করতে ব্যবহৃত হয় তবে একটি আইওএক্সেপশন উত্থাপন করবে। যদি কোনও অনন্য অস্থায়ী ফাইল নাম উপলব্ধ না হয় তবে getTempFileName পদ্ধতিটি একটি IOException উত্থাপন করবে। এই ত্রুটিটি সমাধান করার জন্য, সমস্ত অপ্রয়োজনীয় অস্থায়ী ফাইলগুলি মুছুন।
ম্যাক্স হোজেস

2
অস্থায়ী ফাইলগুলি মূলত একটি নির্দিষ্ট অবস্থার জন্য ব্যবহৃত হয়। যদি ফাইলের সম্প্রসারণটি গুরুত্বপূর্ণ হয় তবে আমি অবাক হয়েছি যে সম্ভবত গেটেম্পফিলনাম ব্যবহার করা লেখার সমাধান নয়। আমি জানি এটি অনেক দিন কেটে গেছে, তবে আপনি যদি আমাদের এই ফাইলগুলির প্রসঙ্গ এবং প্রয়োজনীয়তা সম্পর্কে আরও জানান, আমরা সম্ভবত আরও ভাল পদ্ধতির পরামর্শ দিতে সক্ষম হতে পারি। আরও এখানে: support.microsoft.com/kb/92635?wa=wsignin1.0
ম্যাক্স হেজস

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

উত্তর:


354

(পরিসংখ্যানগতভাবে) অনন্য হওয়ার গ্যারান্টিযুক্ত:

string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv"; 

(সংঘর্ষের সম্ভাবনা সম্পর্কে উইকির নিবন্ধটি উদ্ধৃত করার জন্য:

... উল্কাপিণ্ডের দ্বারা আক্রান্ত হওয়ার জন্য যার বার্ষিক ঝুঁকিটি 17 বিলিয়ন [19] এ একটি সম্ভাবনা বলে অনুমান করা হয়, এর অর্থ সম্ভাবনা প্রায় 0.00000000006 (6 × 10-11), কয়েক দশক তৈরির প্রতিক্রিয়ার সমতুল্য এক বছরে ট্রিলিয়ন ইউইউডি রয়েছে এবং তার একটি সদৃশ রয়েছে। অন্য কথায়, পরের 100 বছরের জন্য প্রতি সেকেন্ডে 1 বিলিয়ন ইউইউডি উত্পন্ন করার পরে, কেবল একটি নকল তৈরির সম্ভাবনা প্রায় 50% হবে। পৃথিবীর প্রতিটি ব্যক্তি 600০০ মিলিয়ন ইউইউডির মালিক হলে একটি সদৃশ হওয়ার সম্ভাবনা প্রায় 50% হবে

সম্পাদনা: দয়া করে জারেডপারের মন্তব্যগুলি দেখুন।


29
তবে কোনও লিখনযোগ্য স্থানে থাকার গ্যারান্টি নেই
জারেডপাড়

33
এবং এগুলি মোটেই অনন্য হওয়ার গ্যারান্টিযুক্ত নয়, কেবল পরিসংখ্যানগতভাবেই অসম্ভব।
প্যাক্সিডিয়াবলো

30
@ প্যাক্স: দুটি আদর্শবাদী গাইড তৈরির চেয়ে আপনার টানা একাধিকবার লটারি জয়ের চেনেস রয়েছে। এটি অনুমান করার মতো যথেষ্ট অনন্য ...
মিচ হুইট

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

207
ভাল প্রভু লোকেরা, মেঘ থেকে আপনার মাথা দূরে রাখতে আরও চেষ্টা করুন। পদ্ধতিরটি হ'ল: একটি এলোমেলো ফাইলের নাম তৈরি করুন, তারপরে এটি উপস্থিত না থাকলে এটি তৈরি করুন। সুতরাং তাকে কেবল সেই সুন্দরভাবে সহায়তা করুন। সিউডো-এলোমেলো জেনারেটর এবং সর্বজনীন স্বতন্ত্র সংখ্যা সম্পর্কে এই সমস্ত আলোচনা সম্পূর্ণ অপ্রয়োজনীয়।
ম্যাক্স হেজস

58

এই ফাংশনটি ব্যবহার করে দেখুন ...

public static string GetTempFilePathWithExtension(string extension) {
  var path = Path.GetTempPath();
  var fileName = Guid.NewGuid().ToString() + extension;
  return Path.Combine(path, fileName);
}

এটি আপনার পছন্দ বাড়ানোর সাথে পুরো পথে ফিরে আসবে path

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


4
সম্ভবত পাথ.চেঞ্জএক্সটেনশন () গাইড.নিউজিউইড () এর চেয়ে আরও মার্জিত হবে To টুস্ট্রিং () + এক্সটেনশান
ওহাদ স্নাইডার

@ ওহাদস্ক - প্রকৃতপক্ষে, Guid.NewGuid().ToString() + extensionএমনকি সঠিক নয়, এটি হওয়া উচিতGuid.NewGuid().ToString() + "." + extension
স্টিফেন সুইসেনসেন

4
আমি মনে করি যে এটি পদ্ধতির চুক্তির উপর নির্ভর করে (এটি প্রত্যাশা রাখুক .txtবা না txt) তবে যেহেতু ChangeExtensionউভয় মামলা পরিচালনা করে, এটি ক্ষতি করতে পারে না
ওহাদ স্নাইডার

1
এক্সটেনশনের পরিবর্তে এটিকে প্রত্যয় বলুন এবং প্রত্যেকে খুশি বলে আমি অনুমান করি
চিয়েল টেন ব্রিনকে

46
public static string GetTempFileName(string extension)
{
  int attempt = 0;
  while (true)
  {
    string fileName = Path.GetRandomFileName();
    fileName = Path.ChangeExtension(fileName, extension);
    fileName = Path.Combine(Path.GetTempPath(), fileName);

    try
    {
      using (new FileStream(fileName, FileMode.CreateNew)) { }
      return fileName;
    }
    catch (IOException ex)
    {
      if (++attempt == 10)
        throw new IOException("No unique temporary file name is available.", ex);
    }
  }
}

দ্রষ্টব্য: এটি Path.GetTempFileName এর মতো কাজ করে। ফাইলের নাম সংরক্ষণ করার জন্য একটি খালি ফাইল তৈরি করা হয়। পাথ.গেটর্যান্ডমফিলনাম () দ্বারা উত্পাদিত সংঘর্ষের ক্ষেত্রে এটি 10 ​​টি প্রচেষ্টা করে;


মনে রাখবেন যে Path.GetRandomFileName()আসলে ডিস্কে একটি শূন্য-বাইট ফাইল তৈরি করে এবং সেই ফাইলটির পুরো পথ ফেরায় returns আপনি এই ফাইলটি ব্যবহার করছেন না, কেবল এক্সটেনশান পরিবর্তন করার জন্য এর নাম। সুতরাং, আপনি যদি নিশ্চিত না হন যে আপনি এই অস্থায়ী ফাইলগুলি মুছে ফেলছেন, 65535 এই ফাংশনে কল করার পরে এটি ব্যর্থ হতে শুরু করবে।
ভ্লাদিমির বারানভ

7
আপনি মিশ্রিত GetTempFileName()এবং GetRandomFileName()GetTempFileName()আমার পদ্ধতির মতো শূন্য-বাইট ফাইল GetRandomFileName()তৈরি করুন , তবে একটি ফাইল তৈরি করে না। দস্তাবেজগুলি থেকে:> GetTempFileName থেকে আলাদা, getRandomFileName কোনও ফাইল তৈরি করে না। আপনার লিঙ্কটি ভুল পৃষ্ঠায় নির্দেশ করে।
Maxence

19

আপনি বিকল্পভাবে System.CodeDom.Compiler.TempFile संगেকশন ব্যবহার করতে পারেন ।

string tempDirectory = @"c:\\temp";
TempFileCollection coll = new TempFileCollection(tempDirectory, true);
string filename = coll.AddExtension("txt", true);
File.WriteAllText(Path.Combine(tempDirectory,filename),"Hello World");

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


10

ফাইলটি আছে কিনা তা পরীক্ষা করে দেখছেন না কেন?

string fileName;
do
{
    fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".csv";
} while (System.IO.File.Exists(fileName));

9
ফাইল.এক্সজিস্টগুলি আপনাকে অতীত সম্পর্কে তথ্য দেয় এবং তাই নির্ভরযোগ্য নয়। ফাইলের ফিরে আসার মধ্যে.এক্সিস্ট এবং আপনার কোড কার্যকর করে কোড তৈরি করা সম্ভব।
জারেডপাড়

4
... তারপরে আপনি নিজের প্রোগ্রামের সাথে সুরক্ষিত হতে পারেন তবে ঠিক একই গন্তব্যটিতে কোনও ফাইল লেখার সাথে অন্য প্রক্রিয়া নয় ...
কোইন

@ জারেডপার এবং এই ঘটনার সম্ভাবনা কী?
মিগল

2
@ মিগল এটি খুব কম, এবং সংজ্ঞা দ্বারা একটি ব্যতিক্রমী শর্ত। হুঁ, ঠিক কী ব্যতিক্রমগুলি ব্যবহার করার জন্য তৈরি করা হয়েছিল।
কোডি গ্রে

3
গাইড সংঘর্ষের জন্য @ কোডি গ্রে'র সুযোগটি 1/2 ^ 128। এটি 2 বার হওয়ার সম্ভাবনা হ'ল 1/2 ^ 256 ইত্যাদি b
মিগল

9

সি ++ এর getTempFileName এর জন্য এমএসডিএন ডকুমেন্টেশন আপনার উদ্বেগ নিয়ে আলোচনা করে এবং এর উত্তর দেয়:

GetTempFileName ফাইলটির নামটি অনন্য বলে গ্যারান্টি দিতে সক্ষম হয় না

শুধুমাত্র ইউনিক প্যারামিটারের নিম্ন 16 বিট ব্যবহার করা হয়। LpPathName এবং lpPrefixString পরামিতি যদি একই থাকে তবে এটি getTempFileName সর্বাধিক 65,535 টি স্বতন্ত্র ফাইল নামের মধ্যে সীমাবদ্ধ করে।

ফাইলের নাম উত্পন্ন করতে ব্যবহৃত অ্যালগরিদমের কারণে, একই উপসর্গের সাহায্যে বৃহত সংখ্যক ফাইল তৈরি করার সময় getTempFileName খারাপভাবে সম্পাদন করতে পারে। এই জাতীয় ক্ষেত্রে, আপনি জিইউইডিগুলির উপর ভিত্তি করে অনন্য ফাইলের নামগুলি বানাতে বাঞ্ছনীয়


2
যদি পূর্ববর্তী অস্থায়ী ফাইলগুলি মোছা না করে 65535 টির বেশি ফাইল তৈরি করতে ব্যবহার করা হয় তবে getTempFileName পদ্ধতিটি একটি IOException উত্থাপন করবে। যদি কোনও অনন্য অস্থায়ী ফাইল নাম উপলব্ধ না হয় তবে getTempFileName পদ্ধতিটি একটি IOException উত্থাপন করবে। এই ত্রুটিটি সমাধান করার জন্য, সমস্ত অপ্রয়োজনীয় অস্থায়ী ফাইলগুলি মুছুন।
ম্যাক্স হোজেস

এটি একটি অসম্পূর্ণ উদ্ধৃতি। প্রাসঙ্গিক উক্তি: " ইউনিক যদি শূন্য না হয় তবে আপনাকে অবশ্যই ফাইলটি তৈরি করতে হবে Only কেবল একটি ফাইলের নাম তৈরি করা হয়েছে, কারণ গেটটিম্পফিলনাম ফাইলটির নাম অনন্য বলে গ্যারান্টি দিতে সক্ষম হয় না।" আপনি যদি একে একে এখানে আলোচনা করার জন্য কল করেন তবে ইউনিক শূন্য হবে।
jnm2

6

কেমন:

Path.Combine(Path.GetTempPath(), DateTime.Now.Ticks.ToString() + "_" + Guid.NewGuid().ToString() + ".csv")

এটি অত্যন্ত অসম্ভব যে কম্পিউটার একই সময়ে একই নির্দেশিকা তৈরি করে। আমি এখানে দেখছি কেবলমাত্র দুর্বলতা হল পারফরম্যান্স এফেক্ট ডেটটাইম ow এখন.টিক্স যুক্ত করবে।


5

আপনি নিম্নলিখিতগুলিও করতে পারেন

string filename = Path.ChangeExtension(Path.GetTempFileName(), ".csv");

এবং এটি প্রত্যাশার মতো কাজ করে

string filename = Path.ChangeExtension(Path.GetTempPath() + Guid.NewGuid().ToString(), ".csv");

2
এটি কোনও ফাইল টেম্প.এসভিএস থাকলে ব্যর্থ হবে এবং আপনি টেম্প.টিএমপি তৈরি করেন এবং তারপরে এক্সটেনশনটি সিএসভিতে পরিবর্তন করেন
ডেভিড

না এটি হবে না ... getTempFileName () একটি অনন্য ফাইল নাম তৈরি করে ... 32K এর কিছু সীমা পর্যন্ত আপনাকে কয়েকটি ফাইল মুছতে হবে তবে আমার ধারণা সঠিক হয় বলে আমি মনে করি। আমি যদি চেঞ্জএক্সটেনশনে এমন কোনও ফাইলের পথটি পাস করি যা অনন্য হওয়ার গ্যারান্টিযুক্ত নয় তবে আমার সমাধানটি এটি করে না।
মাইকেল প্রেভেকি

11
GetTempFileName গ্যারান্টি দেয় যে এটি ফিরে আসার পথটি অনন্য হবে। এটি যে পথটি "+ .csv" ফেরায় তা অনন্য হবে Not ডেভিড যেমন বলেছিলেন তেমনভাবে এক্সটেনশন পরিবর্তন করা ব্যর্থ হতে পারে।
মার্কাস গ্রিপ

5
GetTempFileName একটি ফাইল তৈরি করে, তাই আপনার প্রথম উদাহরণটি রিসোর্স লিক।
গ্যারি ম্যাকগিল

3

আমার মতে, বেশিরভাগ উত্তর এখানে উপ-অনুকূল হিসাবে প্রস্তাবিত। নিকটতম আসার আসলটি হ'ল ব্রান প্রাথমিকভাবে প্রস্তাবিত মূলটি।

একটি টেম্প ফাইলের নাম অবশ্যই হবে

  • অনন্য
  • সংঘাত-মুক্ত (ইতিমধ্যে বিদ্যমান নেই)
  • পারমাণবিক (একই ক্রিয়াকলাপে নাম ও ফাইল তৈরি)
  • অনুমান করা শক্ত

এই প্রয়োজনীয়তার কারণে, আপনার নিজেরাই এমন জন্তুটিকে প্রোগ্রাম করা কোনও aশ্বরিক ধারণা নয়। আইও লাইব্রেরিগুলি লেখার স্মার্ট লোকেরা লকিংয়ের মতো জিনিসগুলি (যদি প্রয়োজন হয়) ইত্যাদি সম্পর্কে উদ্বিগ্ন হয় তাই, আমি সিস্টেম.আইও.প্যাথ.গেটটেম্পফিলনাম () পুনরায় লেখার দরকার দেখছি না।

এটি, যদিও এটি আনাড়ি মনে হয়, কাজটি করা উচিত:

//Note that this already *creates* the file
string filename1 = System.IO.Path.GetTempFileName()
// Rename and move
filename = filename.Replace(".tmp", ".csv");
File.Move(filename1 , filename);

2
তবে এটি দ্বন্দ্ব মুক্ত নয়, 'সিএসভি' ইতিমধ্যে বিদ্যমান এবং ওভাররাইট করা যেতে পারে।
xvan

3
File.MoveIOExceptionগন্তব্য ফাইলটি ইতিমধ্যে বিদ্যমান থাকলে উত্থাপন করে। msdn.microsoft.com/en-us/library/...
joshuanapoli

2

এটি আপনার পক্ষে কার্যকর হতে পারে ... এটি একটি গেম তৈরি করা। ফোল্ডার এবং এটিকে VB.NET এ স্ট্রিং হিসাবে ফিরিয়ে দিন।

সহজে সি # তে রূপান্তরযোগ্য:

Public Function GetTempDirectory() As String
    Dim mpath As String
    Do
        mpath = System.IO.Path.Combine(System.IO.Path.GetTempPath, System.IO.Path.GetRandomFileName)
    Loop While System.IO.Directory.Exists(mpath) Or System.IO.File.Exists(mpath)
    System.IO.Directory.CreateDirectory(mpath)
    Return mpath
End Function

2

এটি আমার পক্ষে ভাল কাজ করে বলে মনে হচ্ছে: এটি ফাইলের অস্তিত্বের জন্য যাচাই করে এবং এটি লিখিত স্থান হিসাবে নিশ্চিত হওয়ার জন্য ফাইলটি তৈরি করে। ঠিকঠাক কাজ করা উচিত, আপনি সরাসরি ফাইলস্ট্রিমে ফিরে যেতে এটি পরিবর্তন করতে পারেন (যা সাধারণত একটি টেম্প ফাইলের জন্য আপনার প্রয়োজন):

private string GetTempFile(string fileExtension)
{
  string temp = System.IO.Path.GetTempPath();
  string res = string.Empty;
  while (true) {
    res = string.Format("{0}.{1}", Guid.NewGuid().ToString(), fileExtension);
    res = System.IO.Path.Combine(temp, res);
    if (!System.IO.File.Exists(res)) {
      try {
        System.IO.FileStream s = System.IO.File.Create(res);
        s.Close();
        break;
      }
      catch (Exception) {

      }
    }
  }
  return res;
} // GetTempFile

2

সি # তে সহজ কাজ:

public static string GetTempFileName(string extension = "csv")
{
    return Path.ChangeExtension(Path.GetTempFileName(), extension);
}

GetTempFileName () টেম্প ফোল্ডারে একটি অস্থায়ী ফাইল তৈরি করে। ফলস্বরূপ আপনার দুটি অস্থায়ী ফাইল তৈরি হবে, যার একটি ফাঁস হবে।
evgenybf

1

আমি @ ম্যাক্সেন্স এবং @ মিচ গমের উত্তরগুলি মাথায় রেখে আমি গেটটিম্পফিলনাম পদ্ধতিটির ফাইলের নামটি চাই (ফাইলনামটি তৈরি করা একটি নতুন ফাইলের নাম) পছন্দসই এক্সটেনশন যুক্ত করে।

string GetNewTempFile(string extension)
{
    if (!extension.StartWith(".")) extension="." + extension;
    string fileName;
    bool bCollisions = false;
    do {
        fileName = Path.Combine(System.IO.Path.GetTempPath(), Guid.NewGuid().ToString() + extension);
        try
        {
            using (new FileStream(fileName, FileMode.CreateNew)) { }
            bCollisions = false;
        }
        catch (IOException)
        {
            bCollisions = true;
        }
    }
    while (bCollisions);
    return fileName;
}

0

এটি আমি যা করছি:

স্ট্রিং টিস্ট্যাম্প = স্ট্রিং.ফর্ম্যাট ("{0: yyyyMMdd.HHmmss}", ডেটটাইম.নাউ);
স্ট্রিং প্রসিড = প্রক্রিয়া.গেটকন্ট্রন্টপ্রসেস ()। আইডি.টোস্ট্রিং ();
স্ট্রিং tmpFolder = System.IO.Path.GetTempPath ();
স্ট্রিং আউট ফাইল = tmpFolder + প্রসিড + "_" + টিস্ট্যাম্প + ".txt";

ভাল: প্রক্রিয়া শনাক্তকারীকে অন্তর্ভুক্ত খারাপ: থ্রেড শনাক্তকারীকে অন্তর্ভুক্ত করা হয় না (যদিও আপনি এটি কোনও লকের ভিতরে চালাতে পারেন) খারাপ: টাইমস্ট্যাম্পটি কেবল 1 সেকেন্ড রেজোলিউশন। অনেকগুলি, অনেক অ্যাপ্লিকেশনগুলিতে, প্রতি সেকেন্ডে অনেকগুলি ফাইল উত্পাদন করা সাধারণ।
অ্যান্ড্রুফ

0

এটি ইনক্রিমেন্টাল ফাইল নামগুলি তৈরি করার একটি সহজ তবে কার্যকর উপায়। এটি সরাসরি বর্তমানটিকে দেখবে (আপনি সহজেই অন্য কোথাও এটি নির্দেশ করতে পারেন) এবং আপনার অ্যাপ্লিকেশন নাম * .txt বেসটি (আবার আপনি সহজেই এটি পরিবর্তন করতে পারেন) সহ ফাইলগুলি অনুসন্ধান করতে পারেন। এটি 0000 এ শুরু হবে যাতে প্রথম ফাইলের নামটি আপনার অ্যাপ্লিকেশননাম0000.txt হবে। যদি কোনও কারণে বাম এবং ডান অংশগুলির মধ্যে জাঙ্কের সাথে ফাইলের নাম থাকে (যার অর্থ সংখ্যা নয়) তবে সেই ফাইলগুলি ট্রাইপার্স কলের কারণে উপেক্ষা করা হবে।

    public static string CreateNewOutPutFile()
    {
        const string RemoveLeft = "YourApplicationName";
        const string RemoveRight = ".txt";
        const string searchString = RemoveLeft + "*" + RemoveRight;
        const string numberSpecifier = "0000";

        int maxTempNdx = -1;

        string fileName;
        string [] Files = Directory.GetFiles(Directory.GetCurrentDirectory(), searchString);
        foreach( string file in Files)
        {
            fileName = Path.GetFileName(file);
            string stripped = fileName.Remove(fileName.Length - RemoveRight.Length, RemoveRight.Length).Remove(0, RemoveLeft.Length);
            if( int.TryParse(stripped,out int current) )
            {
                if (current > maxTempNdx)
                    maxTempNdx = current;
            }
        }
        maxTempNdx++;
        fileName = RemoveLeft + maxTempNdx.ToString(numberSpecifier) + RemoveRight;
        File.CreateText(fileName); // optional
        return fileName;
    }

0

আমি ইন্টারনেট থেকে পাওয়া উত্তরগুলির ভিত্তিতে, নিম্নলিখিত হিসাবে আমার কোডে আসি:

public static string GetTemporaryFileName()
{       
    string tempFilePath = Path.Combine(Path.GetTempPath(), "SnapshotTemp");
    Directory.Delete(tempFilePath, true);
    Directory.CreateDirectory(tempFilePath);
    return Path.Combine(tempFilePath, DateTime.Now.ToString("MMddHHmm") + "-" + Guid.NewGuid().ToString() + ".png");
}

এবং জে হিলিয়ার্ডের সি # কুকবুক হিসাবে, স্টিফেন টেইলহেট আপনার অ্যাপ্লিকেশনটিতে একটি অস্থায়ী ফাইল ব্যবহারের দিকে ইঙ্গিত করেছেন :

  • আপনার যখনই পরে পুনরুদ্ধারের জন্য অস্থায়ীভাবে তথ্য সঞ্চয় করতে হবে তখন আপনার একটি অস্থায়ী ফাইল ব্যবহার করা উচিত।

  • আপনাকে যে জিনিসটি মনে রাখতে হবে তা হ'ল এটি তৈরি করা অ্যাপ্লিকেশনটি বন্ধ করার আগে এই অস্থায়ী ফাইলটি মুছে ফেলা।

  • যদি এটি মোছা না হয়, ব্যবহারকারী এটি নিজে মুছে না দেওয়া পর্যন্ত এটি ব্যবহারকারীর অস্থায়ী ডিরেক্টরিতে থাকবে।


-2

আমি মনে করি আপনার এটি চেষ্টা করা উচিত:

string path = Path.GetRandomFileName();
path = Path.Combine(@"c:\temp", path);
path = Path.ChangeExtension(path, ".tmp");
File.Create(path);

এটি একটি অনন্য ফাইল নাম উত্পন্ন করে এবং একটি নির্দিষ্ট স্থানে সেই ফাইলের নাম সহ একটি ফাইল তৈরি করে।


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