मैं .NET के साथ एक विशिष्ट एक्सटेंशन के साथ एक अस्थायी फ़ाइल कैसे बना सकता हूं?


277

मुझे एक .csv एक्सटेंशन के साथ एक अद्वितीय अस्थायी फ़ाइल जनरेट करने की आवश्यकता है।

अभी मैं जो करता हूं, वह है

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

हालाँकि, यह गारंटी नहीं देता है कि मेरी .csv फ़ाइल अद्वितीय होगी।

मुझे पता है कि मुझे कभी मिली टक्कर बहुत कम है (खासकर अगर आप समझते हैं कि मैं .tmp फाइलें नहीं हटाता हूं), लेकिन यह कोड मुझे अच्छा नहीं लगता।

निश्चित रूप से मैं मैन्युअल रूप से यादृच्छिक फ़ाइल नाम उत्पन्न कर सकता था जब तक कि मैं अंततः एक अद्वितीय (जो एक समस्या नहीं होनी चाहिए) ढूंढता हूं, लेकिन मैं यह जानने के लिए उत्सुक हूं कि क्या दूसरों ने इस समस्या से निपटने का एक अच्छा तरीका ढूंढ लिया है।


4
GetTempFileName के बारे में कुछ चेतावनी GetTempFileName विधि IOException को बढ़ाएगी यदि इसका उपयोग पिछली अस्थायी फ़ाइलों को हटाने के बिना 65535 से अधिक फ़ाइलों को बनाने के लिए किया जाता है। यदि कोई अद्वितीय अस्थायी फ़ाइल नाम उपलब्ध नहीं है तो GetTempFileName विधि एक IOException बढ़ाएगी। इस त्रुटि को हल करने के लिए, सभी अनावश्यक अस्थायी फ़ाइलों को हटा दें।
मैक्स होजेस

2
अस्थायी फाइलें मुख्य रूप से परिस्थितियों के एक विशिष्ट सेट के लिए उपयोग की जाती हैं। यदि फ़ाइल एक्सटेंशन महत्वपूर्ण है, तो मुझे आश्चर्य होता है कि हो सकता है कि GetTempFileName का उपयोग लेखन समाधान न हो। मुझे पता है कि यह एक लंबा समय हो गया है, लेकिन अगर आपने हमें इन फ़ाइलों के संदर्भ और आवश्यकता के बारे में अधिक बताया, तो हम पूरी तरह से बेहतर दृष्टिकोण का सुझाव देने में सक्षम हो सकते हैं। यहाँ और अधिक: 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) है, जो कुछ दसियों को बनाने के बाधाओं के बराबर है एक साल में UUIDs का ट्रिलियन और एक डुप्लिकेट होना। दूसरे शब्दों में, अगले 100 वर्षों के लिए हर सेकंड 1 बिलियन यूयूआईडी बनाने के बाद, केवल एक डुप्लिकेट बनाने की संभावना लगभग 50% होगी। एक डुप्लिकेट की संभावना लगभग 50% होगी यदि पृथ्वी पर प्रत्येक व्यक्ति 600 मिलियन यूयूआईडी का मालिक है

EDIT: कृपया JaredPar की टिप्पणियों को भी देखें।


29
लेकिन एक योग्य स्थान पर होने की गारंटी नहीं
JaredPar

33
और वे बिल्कुल भी अद्वितीय होने की गारंटी नहीं हैं , बस सांख्यिकीय रूप से संभावना नहीं है।
पाक्सिडाब्लो

30
@ पैक्स: आपके पास दो वैचारिक छापे पैदा करने की तुलना में एक पंक्ति में 1000 बार लॉटरी जीतने का अधिक मौका है। मुझे लगता है कि यह काफी अनूठा है ...
मिच गेहूं

11
@ कारण यह अद्वितीय नहीं है क्योंकि यह मेरे लिए संभव है कि एक ही पथ में एक ही नाम के साथ एक फ़ाइल बनाएं। अद्वितीय होने की गारंटी देते हुए GUIDs भी अनुमानित हैं, जिसका अर्थ है कि पर्याप्त जानकारी दी गई है जिससे मैं आपके बॉक्स द्वारा उत्पन्न गाइड के अगले सेट का अनुमान लगा
सकूं

207
अच्छे स्वामी लोग, अपने सिर को बादलों से दूर रखने के लिए कठिन प्रयास करें। दृष्टिकोण है: एक यादृच्छिक फ़ाइल नाम उत्पन्न करें, फिर इसे बनाएं यदि यह मौजूद नहीं है। तो बस उसे अच्छी तरह से कोड करने में मदद करें। छद्म यादृच्छिक जनरेटर और सार्वभौमिक रूप से अद्वितीय संख्याओं के बारे में यह सब बात पूरी तरह अनावश्यक है।
मैक्स हॉजेस

58

इस फ़ंक्शन को आज़माएं ...

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

यह आपकी पसंद के विस्तार के साथ एक पूर्ण पथ लौटाएगा।

ध्यान दें, यह एक अद्वितीय फ़ाइल नाम का उत्पादन करने की गारंटी नहीं है क्योंकि कोई अन्य व्यक्ति तकनीकी रूप से पहले से ही उस फ़ाइल को बना सकता है। हालाँकि किसी व्यक्ति द्वारा आपके ऐप द्वारा निर्मित अगली गाइड का अनुमान लगाने और इसे बनाने की संभावना बहुत कम है। यह मान लेना बहुत सुरक्षित है कि यह अद्वितीय होगा।


4
शायद Path.ChangeExtension () गाइड की तुलना में अधिक सुंदर होगा। न्यूगाइड ()। ToString () + विस्तार
ओहद श्नाइडर

@ohadsc - वास्तव में, 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 की तरह काम करता है। फ़ाइल नाम आरक्षित करने के लिए एक खाली फ़ाइल बनाई जाती है। यह Path.GetRandomFileName () द्वारा उत्पन्न टकराव के मामले में 10 प्रयास करता है;


ध्यान रखें कि Path.GetRandomFileName()वास्तव में डिस्क पर एक शून्य-बाइट फ़ाइल बनाता है और उस फ़ाइल का पूरा पथ देता है। आप इस फ़ाइल का उपयोग नहीं कर रहे हैं, केवल इसका नाम एक्सटेंशन बदलने के लिए। इसलिए, यदि आप यह सुनिश्चित नहीं करते हैं कि आप इन अस्थायी फ़ाइलों को हटा रहे हैं, तो इस फ़ंक्शन के 65535 कॉल के बाद यह विफल होना शुरू हो जाएगा।
व्लादिमीर बारानोव

7
आप मिश्रित है GetTempFileName()और GetRandomFileName()GetTempFileName()मेरी विधि की तरह एक शून्य-बाइट फ़ाइल GetRandomFileName()बनाएँ , लेकिन एक फ़ाइल नहीं बनाता है। डॉक्स से:> GetTempFileName के विपरीत, GetRandomFileName एक फ़ाइल नहीं बनाता है। आपका लिंक गलत पेज की ओर इशारा करता है।
मैक्सेंस

19

आप वैकल्पिक रूप से System.CodeDom.Compiler.TempFileCollection का भी उपयोग कर सकते हैं ।

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

यहाँ मैंने एक txt एक्सटेंशन का उपयोग किया है लेकिन आप जो चाहें निर्दिष्ट कर सकते हैं। मैं भी ध्वज को सही रखता हूं ताकि उपयोग के बाद अस्थायी फ़ाइल को चारों ओर रखा जाए। दुर्भाग्य से, TempFileCollection प्रति एक्सटेंशन एक यादृच्छिक फ़ाइल बनाता है। यदि आपको अधिक अस्थायी फ़ाइलों की आवश्यकता है, तो आप TempFileCollection के कई उदाहरण बना सकते हैं।


10

फ़ाइल मौजूद है तो जाँच क्यों नहीं?

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

9
File.Exists आपको अतीत के बारे में जानकारी बताता है और इसलिए विश्वसनीय नहीं है। File.Exist की वापसी और आपके कोड को निष्पादित करने के बीच में फ़ाइल का निर्माण संभव है।
JaredPar

4
... तो आप अपने स्वयं के कार्यक्रम के साथ सुरक्षित हो सकते हैं, लेकिन उस सटीक गंतव्य पर एक फ़ाइल लिखने की अन्य प्रक्रिया के साथ नहीं ...
कोएन

@JaredPar और यह क्या हो रहा है?
मिगोल

2
@ मिगोल यह बहुत कम है, और परिभाषा के अनुसार एक असाधारण स्थिति है। हम्म, वास्तव में क्या अपवादों के लिए इस्तेमाल किए जाने के लिए डिज़ाइन किए गए थे।
कोड़ी ग्रे

3
गाइड क्लैश के लिए @CodyGray मौका 1/2 ^ 128 है। संभावना है कि यह 2 बार होगा 1/2 ^ 256 आदि न परेशान!
मिगोल

9

C ++ के GetTempFileName के लिए MSDN प्रलेखन आपकी चिंता पर चर्चा करता है और इसका उत्तर देता है:

GetTempFileName यह गारंटी नहीं दे पा रहा है कि फ़ाइल नाम अद्वितीय है

केवल uunique पैरामीटर के निचले 16 बिट्स का उपयोग किया जाता है। यदि LpPathName और lpPrefixString पैरामीटर समान रहते हैं, तो यह GetTempFileName को अधिकतम 65,535 अद्वितीय फ़ाइल नामों तक सीमित करता है।

फ़ाइल नाम उत्पन्न करने के लिए उपयोग किए जाने वाले एल्गोरिथ्म के कारण, GetTempFileName एक ही उपसर्ग के साथ बड़ी संख्या में फ़ाइलें बनाते समय खराब प्रदर्शन कर सकता है। ऐसे मामलों में, यह अनुशंसा की जाती है कि आप GUID के आधार पर अद्वितीय फ़ाइल नामों का निर्माण करें


2
GetTempFileName विधि IOException को बढ़ाएगी यदि इसका उपयोग पिछली अस्थायी फ़ाइलों को हटाने के बिना 65535 से अधिक फ़ाइलों को बनाने के लिए किया जाता है। यदि कोई अद्वितीय अस्थायी फ़ाइल नाम उपलब्ध नहीं है तो GetTempFileName विधि एक IOException बढ़ाएगी। इस त्रुटि को हल करने के लिए, सभी अनावश्यक अस्थायी फ़ाइलों को हटा दें।
मैक्स हॉजेस

वह एक अधूरी बोली है। प्रासंगिक उद्धरण: " यदि uUnique शून्य नहीं है , तो आपको फ़ाइल को स्वयं बनाना होगा। केवल फ़ाइल नाम बनाया गया है, क्योंकि GetTempFileName यह गारंटी नहीं दे पा रहा है कि फ़ाइल नाम अद्वितीय है।" यदि आप इसे उसी तरह कहते हैं जिस तरह से हर कोई यहां चर्चा कर रहा है, तो uUnique शून्य होगा।
jnm2

6

कैसा रहेगा:

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

यह अत्यधिक असंभव है कि कंप्यूटर एक ही समय में एक ही गाइड उत्पन्न करेगा। एकमात्र कमजोरी जो मुझे यहां दिखाई दे रही है वह है प्रदर्शन प्रभाव DateTime.Now.Ticks जोड़ देगा।


5

आप निम्न कार्य भी कर सकते हैं

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

और यह भी उम्मीद के मुताबिक काम करता है

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

2
यह विफल हो जाएगा अगर कोई फ़ाइल temp.csv है और आप temp.tmp बनाते हैं और फिर सीएसवी में एक्सटेंशन बदल देते हैं
डेविड

नहीं, यह नहीं होगा ... GetTempFileName () एक अद्वितीय फ़ाइल नाम बनाता है ... 32K की कुछ सीमा तक जिस बिंदु पर आपको कुछ फ़ाइलों को हटाने की आवश्यकता होती है, लेकिन मुझे लगता है कि मेरा समाधान सही है। यह गलत है अगर मैं ChangeExtension में एक फ़ाइल पथ पारित करने के लिए किया गया था जो अद्वितीय होने की गारंटी नहीं है, लेकिन यह मेरा समाधान नहीं है।
माइकल प्रीवेकी

11
GetTempFileName गारंटी देता है कि यह जिस पथ पर लौटेगा वह अद्वितीय होगा। ऐसा नहीं है कि यह जिस पथ पर लौटता है + ".csv" अद्वितीय होगा। डेविड ने कहा कि इस तरह से विस्तार बदलना विफल हो सकता है।
मार्कस ग्रिप

5
GetTempFileName एक फ़ाइल बनाता है, इसलिए आपका पहला उदाहरण संसाधन रिसाव है।
गैरी मैकगिल

3

मेरी राय में, अधिकांश उत्तर यहां उप-इष्टतम के रूप में प्रस्तावित हैं। जो सबसे नज़दीक आ रहा है वह मूल रूप से ब्रैन द्वारा शुरू किया गया प्रस्ताव है।

एक अस्थायी फ़ाइल नाम होना चाहिए

  • अद्वितीय
  • संघर्ष-रहित (पहले से मौजूद नहीं)
  • परमाणु (एक ही ऑपरेशन में नाम और फ़ाइल का निर्माण)
  • अनुमान लगाना कठिन

इन आवश्यकताओं के कारण, इस तरह के जानवर को अपने दम पर प्रोग्राम करना कोई ईश्वरीय विचार नहीं है। IO लाइब्रेरी लिखने वाले स्मार्ट लोग लॉकिंग (यदि आवश्यक हो) आदि जैसी चीजों के बारे में चिंता करते हैं, इसलिए, मुझे System.IO.Path.GetTempFileName () को फिर से लिखने की कोई आवश्यकता नहीं है।

यह, भले ही यह अनाड़ी दिखता हो, काम करना चाहिए:

//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
लेकिन यह संघर्ष मुक्त नहीं है, 'सीएसवी' पहले से ही मौजूद हो सकता है और अधिलेखित हो सकता है।
ज़वान

3
File.MoveIOExceptionगंतव्य फ़ाइल पहले से मौजूद है, तो उठाता है। msdn.microsoft.com/en-us/library/…
joshuanapoli

2

यह आपके लिए आसान हो सकता है ... यह एक अस्थायी बनाने के लिए है। फ़ोल्डर और इसे VB.NET में एक स्ट्रिंग के रूप में लौटाएं।

आसानी से C # के लिए परिवर्तनीय:

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

C # में आसान कार्य:

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

GetTempFileName () अस्थायी फ़ोल्डर में एक अस्थायी फ़ाइल बनाता है। नतीजतन आपके पास दो अस्थायी फाइलें बनाई जाएंगी, जिनमें से एक लीक होगी।
evgenybf

1

मैंने @Maxence और @Mitch Wheat के जवाबों को मिलाया और मुझे ध्यान में रखते हुए GetTempFileName विधि (फ़ाइल का नाम नई फ़ाइल का नाम बनाया गया है) को एक्सटेंशन पसंद करते हुए जोड़ा।

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

यह मैं क्या कर रहा हूँ:

string tStamp = String.Format ("{0: yyyyMMdd.HHmmss}", DateTime.Now);
string ProcID = Process.GetCurrentProcess ()। Id.ToString ();
string tmpFolder = System.IO.Path.GetTempPath ();
string outFile = tmpFolder + ProcID + "_" + tStamp + ".txt"।

अच्छा: इसमें प्रक्रिया पहचानकर्ता शामिल है बुरा: में थ्रेड आइडेंटिफायर शामिल नहीं है (हालांकि आप इसे एक लॉक के अंदर चला सकते हैं) खराब: टाइमस्टैम्प केवल 1 सेकंड का संकल्प है। कई, कई अनुप्रयोगों में, प्रति सेकंड कई फ़ाइलों का उत्पादन करना सामान्य है।
andrewf

0

यह वृद्धिशील फ़ाइल नाम उत्पन्न करने का एक सरल लेकिन प्रभावी तरीका है। यह सीधे वर्तमान में दिखेगा (आप आसानी से इंगित कर सकते हैं कि कहीं और) और आधार के साथ फ़ाइलों की खोज करें YourApplicationName * .txt (फिर से आप आसानी से इसे बदल सकते हैं)। यह 0000 से शुरू होगा ताकि आपका पहला फ़ाइल नाम YourApplicationName0000.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");
}

और जे Hilyard द्वारा सी # रसोई की किताब के रूप में, स्टीफन Teilhet अपने आवेदन में एक अस्थायी फ़ाइल का उपयोग करने में बताया :

  • जब भी आपको बाद में पुनर्प्राप्ति के लिए अस्थायी रूप से जानकारी संग्रहीत करने की आवश्यकता हो, तो आपको एक अस्थायी फ़ाइल का उपयोग करना चाहिए।

  • एक बात जो आपको याद रखनी चाहिए वह यह है कि इस अस्थायी फ़ाइल को उस एप्लिकेशन से पहले डिलीट कर दें जो इसे बनाया गया है।

  • यदि इसे हटाया नहीं गया है, तो यह उपयोगकर्ता के अस्थायी निर्देशिका में रहेगा जब तक कि उपयोगकर्ता इसे मैन्युअल रूप से हटा नहीं देता है।


-2

मुझे लगता है कि आपको यह कोशिश करनी चाहिए:

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

यह एक अद्वितीय फ़ाइल नाम उत्पन्न करता है और एक निर्दिष्ट स्थान पर उस फ़ाइल नाम के साथ एक फ़ाइल बनाता है।


3
इस समाधान में इसके साथ बहुत सारी समस्याएं हैं। आप C: \ temp को एक पूर्ण पथ के साथ जोड़ नहीं सकते, c: \ temp लेखन योग्य नहीं हो सकता है, और यह गारंटी देता है कि फ़ाइल का .tmp संस्करण अद्वितीय है।
मार्क लकाटा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.