কীভাবে বর্তমান ব্যবহারকারীর জন্য অস্থায়ী ফোল্ডার পাবেন


395

বর্তমান ব্যবহারকারীর জন্য অস্থায়ী ফোল্ডার পাথ পেতে আমি নিম্নলিখিত ফাংশনটি ব্যবহার করছি:

string tempPath = System.IO.Path.GetTempPath();

কিছু মেশিনে এটি আমাকে বর্তমান ব্যবহারকারীর অস্থায়ী ফোল্ডার পাথ দেয়:

সি: u দস্তাবেজ এবং সেটিংস \ প্রশাসক \ স্থানীয় সেটিংস \ অস্থায়ী \

কিছু মেশিনে এটি আমাকে সিস্টেম অস্থায়ী ফোল্ডার পাথ দেয়:

সি: \ উইন্ডোজ \ TEMP

এমএসডিএন ডকুমেন্টেশন আরও বলে যে উপরের এপিআই বর্তমান সিস্টেমের অস্থায়ী ফোল্ডারটি দেয়।

অন্য কোনও এপিআই উপলব্ধ আছে যা আমাকে বর্তমান ব্যবহারকারীর অস্থায়ী ফোল্ডার পথটি দেয়:

সি: u দস্তাবেজ এবং সেটিংস \ প্রশাসক \ স্থানীয় সেটিংস \ অস্থায়ী \


2
সিস্টেম.এনভায়রনমেন্ট.গেট এনভায়রনমেন্ট ভেরিয়েবল ("টিইএমপি") এর আচরণ গেটটিম্পপথ () এর মতো। আমার মেশিনে অ্যাকাউন্টের জন্য 'প্রশাসক' উভয় এপিআই "সি: I উইন্ডোজ \ টিএমপি" প্রদান করে তবে অ্যাকাউন্টের জন্য 'নেটওয়ার্ক পরিষেবা' উভয় এপিআই "সি: \ ডকুমেন্টস এবং সেটিংস \ নেটওয়ার্ক পরিষেবা \ স্থানীয় সেটিংস \ টেম্প।" প্রদান করে।
অনুপ

1
সম্ভবত 'প্রশাসক' অ্যাকাউন্টে সি: account উইন্ডোজ \ টেম্পের প্রকৃতপক্ষে কোনও টেম্পোর ফোল্ডার রয়েছে?
হেলেন

2
আপনি কি সি: \ ডকুমেন্টস এবং সেটিংস under এর অধীনে অস্থায়ী পথ পেতে চান তার কোনও সুনির্দিষ্ট কারণ আছে কি?
নলডোরিন

11
অবগতির জন্য: আপনি যদি না সিস্টেম টেম্প ফোল্ডার চাই, না ব্যবহারকারীর (যদি সেট) আপনি Environment.GetEnvironmentVariable ( "টেম্প", EnvironmentVariableTarget.Machine) ব্যবহার করতে পারেন
piers7

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

উত্তর:


405

System.IO.Path.GetTempPath() নেটিভ কল এ কেবল একটি র‍্যাপার GetTempPath(..)কার্নেল 32 এ ।

একটু দেখো Http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx

এই পৃষ্ঠা থেকে অনুলিপি করা:

GetTempPath ফাংশন নিম্নলিখিত ক্রমে পরিবেশের ভেরিয়েবলের অস্তিত্বের জন্য পরীক্ষা করে এবং পাওয়া প্রথম পাথটি ব্যবহার করে:

  • টিএমপি এনভায়রনমেন্ট ভেরিয়েবল দ্বারা নির্দিষ্ট পথ।
  • টিএমপ এনভায়রনমেন্ট ভেরিয়েবল দ্বারা নির্দিষ্ট পথ।
  • USERPROFILE পরিবেশ পরিবর্তনশীল দ্বারা নির্দিষ্ট করা পথ।
  • উইন্ডোজ ডিরেক্টরি।

"উইন্ডোজ ডিরেক্টরি" উইন্ডোজ অধীনে টেম্প ডিরেক্টরি বা উইন্ডোজ ডিরেক্টরি নিজেই কিনা তা আমার পক্ষে সম্পূর্ণ পরিষ্কার নয়। উইন্ডো ডিরেক্টরিতে টেম্প ফাইলগুলি ডাম্পিং করা নিজেই একটি অনাকাঙ্ক্ষিত কেসের মতো শোনাচ্ছে তবে কে জানে।

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


14
TEMPএনভায়রনমেন্ট ভেরিয়েবল দুটি স্থান সেট করা হতে হবে: নিজেই ব্যবহারকারীর জন্য, এবং স্থানীয় মেশিনের জন্য। যদি এটি ব্যবহারকারীর জন্য সেট না করা থাকে, তবে স্থানীয় মেশিনের জন্য একটি ব্যবহার করা হবে এবং এটি সর্বদা একটি ডিফল্ট ইনস্টলেশনতে সেট করা থাকে। সুতরাং অনুসন্ধান দ্বিতীয় ধাপে সাধারণত থামে s পরীক্ষার হলে TMP, TEMPএবং USERPROFILEসব সেট না হয়, এটা আসলে না পড়ে ফিরে %SystemRoot%( C:\Windows\)।
বব

1
উইন্ডোজ পরিষেবাগুলিতে কার্যকর হয় যে কোডগুলি "লোকাল সিস্টেম" এর অধীনে চালিত হয় বা অ্যাপ্লিকেশনগুলিতে যেমন একটি পরিষেবা দ্বারা শুরু হয়েছিল, সি: \ উইন্ডোজ \ টেম্প ফোল্ডারটি কখনও কখনও টেম্পোরারি ফোল্ডার হিসাবে ব্যবহৃত হয়।
নাইনবেরি

1
আপনার লিঙ্কের ডকুমেন্টেশন এতে বলে: "ফিরে আসা স্ট্রিংটি একটি ব্যাকস্ল্যাশ দিয়ে শেষ হয়, উদাহরণস্বরূপ," সি: EM টিইএমপি "But তবে তাদের উদাহরণটি আসলে ব্যাকস্ল্যাশ দিয়ে শেষ হয় না
ডিসিপি

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

35

এটি ব্যবহার করবেন না :

System.Environment.GetEnvironmentVariable("TEMP")

পরিবেশের ভেরিয়েবলগুলি ওভাররাইড করা যায়, তাই the TEMP ভেরিয়েবলটি ডিরেক্টরিটি অগত্যা হয় না।

সঠিক System.IO.Path.GetTempPath()উপায়টি গ্রহণযোগ্য উত্তরের মতো ব্যবহার করা।


34
@ImmortalBlue কারণ এটি অস্থায়ী ডিরেক্টরি নয়। অস্থায়ী ডিরেক্টরি পাওয়ার সঠিক উপায়টি কল করা System.IO.Path.GetTempPath()
ডেভিড হেফারনান

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

সেখানে মধ্যে 2 প্রধান পার্থক্য আছে GetEnvironmentVariable("TEMP")এবং GetTempPath()GetTempPath()প্রথমে "টিএমপি" ভেরিয়েবলের জন্য "টিএমপি" এবং অবশেষে "ব্যবহারকারী প্রফাইলে" পরীক্ষা করে। যদি এর কোনওটি উইন্ডোজ ফোল্ডারে ফিরে না পায় তবে। এটি গ্যারান্টিও দেয় যে এটি সঠিক পথে ফেরত দেয় তবে পথটি বিদ্যমান বলে গ্যারান্টি দেয় না।
লগম্যান 24'17

তবে আপনার কাছে টিএমপি ভেরিয়েবল (সাম্প্রতিক উইন্ডোজ সংস্করণগুলিতে ডিফল্ট দৃশ্য) না থাকলে গ্রহণযোগ্য উত্তরটি ঠিক এটি করে, তাই না?
PRMan

1
GetTempPathকার্নেল ডকুমেন্টেশনগুলি যদি আপনি পড়ে থাকেন তবে আপনার পরিবেশের পরিবর্তনশীলগুলির উপর নির্ভর করে, সুতরাং ব্যবহারকারী লগম্যান যেমন উল্লেখ করেছেন যে ব্যবহার না করার কোনও কারণ নেই GetEnvironmentVariable... তাদের উভয়েরই একই দুর্বলতা রয়েছে।
আনোরজাকেন

22

আমার একই প্রয়োজনীয়তা রয়েছে - আমরা একটি নির্দিষ্ট মূল ডিরেক্টরিতে লগ রাখতে চাই যা পরিবেশের মধ্যে থাকা উচিত।

public static readonly string DefaultLogFilePath = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);

যদি আমি এটি একটি উপ-ডিরেক্টরিতে একত্রিত করতে চাই তবে আমার ব্যবহার করা উচিত Path.Combine( ... )

GetFolderPathপদ্ধতি যা নির্দিষ্ট পথ সৃষ্টি বা শুধু যাচাই করা কিনা আপনি নিয়ন্ত্রণ করতে পারবেন বিশেষ ফোল্ডার অপশন জন্য একটি জমিদার হয়েছে।


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