2010-08-09 15 views
9

मैं एक प्रोग्राम लिख रहा हूं जिसके लिए एक सामान्य अस्थायी फ़ोल्डर की आवश्यकता है। मैं विंडोज टेम्पल फ़ोल्डर्स के बारे में विवरण ढूंढने की कोशिश कर रहा हूं।विंडोज टेम्प निर्देशिका निर्देशिका (जावा)

  1. प्रत्येक उपयोगकर्ता निर्देशिका में AppData \ Local \ अस्थायी तहत \ यह बदल सकता है Windows संस्करण निर्भर करता है - वहाँ दो रास्ते है कि मैं के बारे में पता कर रहे हैं?

  2. अस्थायी \ के तहत प्रणाली फ़ोल्डर में (सी: \ Windows \ अस्थायी)

मैं सोच रहा हूँ विंडोज इनमें से प्रत्येक में वास्तव में क्या करता है। यदि विंडोज किसी भी स्थान से फ़ाइलों को हटा देता है, तो ऐसा कब होता है? मैं अपने प्रोग्रामिंग के लिए इन निर्देशिकाओं का उपयोग कैसे कर सकता/सकती हूं?

संपादित करें: मुझे वास्तव में एक बड़ी समस्या है - एक निश्चित इंजन के कारण मैं अपने प्रोग्राम के साथ परोक्ष रूप से चल रहा हूं, जो एक अस्थायी निर्देशिका में बना रहे फ़ाइलों का उपयोग करता है, मुझे एक temp निर्देशिका की आवश्यकता है जो व्हाइटस्पेस का उपयोग नहीं करता पथ में पात्र। विंडोज़ पर जावा की System.getProperty ("java.io.tmpdir") मुझे उस अस्थायीता देता है जो उपयोगकर्ता निर्देशिका में है, जो XP पर "दस्तावेज़ और सेटिंग्स ..." के अंतर्गत नहीं है। कोई सुझाव? यही कारण है कि मैं सी: \ विंडोज \ Temp \ निर्देशिका के बारे में सोच रहा हूं ...

उत्तर

3

काफी नहीं। एक उपयोगकर्ता और सिस्टम फ़ोल्डर है, जिसमें से डिफ़ॉल्ट स्थान विंडोज संस्करण, सिस्टम फ़ोल्डर का नाम, और वास्तव में विंडोज़ के पुराने संस्करणों में भिन्न होता है, उपयोगकर्ता और सिस्टम दोनों मामले के लिए समान था। हालांकि, ये डिफ़ॉल्ट ओवर-राइड हो सकते हैं (वे सिस्टम पर हैं जो मैं अब उपयोग कर रहा हूं, जहां वे सिस्टम फ़ोल्डर के समान ड्राइव पर नहीं हैं)।

स्थान सिस्टम चर में संग्रहीत हैं। कुछ ढांचे (.NET, VB6 और इसमें कोई संदेह नहीं है) आपको सिस्टम वैरिएबल को देखने के बजाय पथ खोजने के लिए विश्वसनीय तरीके प्रदान करते हैं (उदा। System.IO.Path.GetTempPath .NET में)।

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

.NET System.IO.Path.GetTempFileName() में अस्थायी क्षेत्र में एक नई फ़ाइल तैयार होगी और इसका नाम आपके पास वापस कर देगा, जो कि दूसरों के साथ संघर्ष न करने की उचित गारंटी है, इसलिए उस या समान विधियों का उपयोग करें यदि आप।

+0

के साथ उपयोगकर्ता निर्देशिका में है। मुझे पूरा यकीन है कि Windows रीबूट पर C: \ Windows \ Temp \ फ़ोल्डर खाली करता है ... या कम से कम ऐसा लगता है। क्या कोई इसकी पुष्टि कर सकता है? –

+0

@ टोनी आर - यह कॉन्फ़िगरेशन निर्भर है। मैंने जिन साइटों पर काम किया है, वे रीबूट पर tmp को साफ़ नहीं करते हैं (लेकिन कुछ करते हैं)। –

+0

System.IO.Path.GetTempFileName() जावा में File.createTempFile (...) है। –

0

अपने प्रश्न के उत्तर का उत्तर देने के लिए - यदि आप .NET का उपयोग कर रहे हैं, तो आप System.IO नेमस्पेस के Path.GetTempPath() विधि का उपयोग कर सकते हैं अस्थायी निर्देशिका का स्थान प्राप्त करें।

// Get the path of the temporary directory 
string tempDir = Path.GetTempPath(); 

// "Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file." 
string tempFile = Path.GetTempFileName(); 
+0

धन्यवाद = डी। मैं जावा का उपयोग कर रहा हूं, इसलिए मैं temp पथ प्राप्त कर सकता हूं जो System.getPropterty (...) –

0

%TEMP% वातावरण चर है कि मेरे पीसी (XP SP3) पर परिभाषित किया है डॉस शैली abcdef~1 निर्देशिका नाम का उपयोग करता है - इसलिए, अगर आपको लगता है कि चर खींच सकते हैं, तो आप स्पेस के एक पथ के साथ खत्म करना चाहिए।

उदा। Start>Run>%TEMP% मुझे C:\DOCUME~1\<user>\LOCALS~1\Temp

हालांकि, यदि कोई 'सुपर-उपयोगकर्ता' उस चर के साथ घूमता है और इसे कहीं और इंगित करता है, तो यह संभव है कि चीजें खत्म हो जाएंगी। आप 8-char-and-no-spaces पथ को पुनर्प्राप्त करने के लिए like this पर कुछ देख सकते हैं।

1

ऐसा लगता है कि आपके पास दो प्रोग्राम हैं जिन्हें temp फ़ाइलों को साझा करने की आवश्यकता है और एक निश्चित रूप से पथ नाम में रिक्त स्थान नहीं चाहता है। शायद ऐसा करने के लिए सबसे आसान काम है:

  1. एक आम निर्देशिका
  2. लांच प्रत्येक आवेदन (इस संशोधित वातावरण से) के लिए TMP और अस्थायी चर सेट - जो अस्थायी चर उठाना चाहिए

तो कमांड प्रॉम्प्ट पर आप ऐसा कर सकता है:

  1. set TMP = C: \ mytemp
  2. सेट अस्थायी = C: \ mytemp
  3. जावा -cp x; y; z my.application.Entry
  4. रन अन्य अनुप्रयोग

आशा है कि मदद करता है (उम्मीद यह भी अस्थायी/tmp के लिए पर्यावरण पढ़ता है)।

+0

आप एक एप्लिकेशन को काम करने के लिए बस एक प्रणाली के तरीके को बदलने जा रहे हैं? क्या होता है अगर कोई अस्थायी फ़ोल्डर स्थान "ठीक करता है"। यदि इन अनुप्रयोगों में अस्थायी फ़ोल्डरों के लिए अस्थायी फ़ोल्डरों के लिए विशिष्ट आवश्यकताएं हैं जो अस्थायी फ़ोल्डरों के लिए सामान्य और उससे अधिक सामान्य हैं, तो मैं अपना स्वयं का अस्थायी फ़ोल्डर बनाउंगा और सामान्य लोगों की बजाय इसका उपयोग करूंगा, या पथ के "एमएस-डॉस संगत" संस्करण का उपयोग करूंगा , तो कोई जगह नहीं होगी। –

+0

सिस्टम स्तर पर कुछ भी बदलने की जरूरत नहीं है। सुझाव बैच स्क्रिप्ट या सेमीडी शैल से ठीक काम करेगा और केवल स्थानीयकरण प्रभाव होगा। –

8

यह आपको जावा में विंडोज़ temp निर्देशिका का मार्ग देगा।

File.createTempFile("temp-file", "tmp").getParent() 
0

उपयोग इस कोड

try { String s=File.createTempFile("temp-file", "tmp").getParent(); 
      System.out.println(s); 

     } catch (IOException ex) { 
      Logger. getLogger(Result.class.getName()).log(Level.SEVERE, null, ex); 
      } 
संबंधित मुद्दे