दिलचस्प पोस्ट
Android में सो थैड या प्रक्रिया को कैसे रोकें? जावास्क्रिप्ट: केस-असंवेदनशील खोज कैसे एक प्रचलित POST विधि में मापदंडों तक पहुँचने के लिए आधारभूत गुणों की प्रतिलिपि बनाने के लिए सी # प्रतिबिंब का उपयोग करना सी # जेआईटी कंपाइलिंग और .नेट शुद्ध-सीएसएस में एक चर-ऊंचाई चिपचिपा पाद लेख कैसे परिभाषित किया जा सकता है? एक लूप के लिए क्लोज़र्स क्रोम डेवलपर टूल में जावास्क्रिप्ट को अक्षम कैसे करें पायथन में repr () फ़ंक्शन को समझना अल्पविराम सीमांकित सूची SQL सर्वर बनाने के लिए यह क्वेरी क्या करती है? समय में स्थैतिक फ़ील्ड्स आरम्भ नहीं किए जाते हैं? फैब्रिक.जेएस कैनवास पर कई कतरन वाले क्षेत्रों वसंत: हम इंटरफ़ेस को क्यों संचालित करते हैं और लागू क्लास नहीं करते? अजाक्स XmlHttpRequest के साथ फ़ाइल अपलोड करें कोड jsFiddle में काम करते हैं लेकिन ब्राउज़र में नहीं

निर्देशिका के अस्तित्व की जाँच करें और यदि मौजूद नहीं है तो बनाएं

मैं अक्सर खुद को आर स्क्रिप्ट लिखता हूं जो बहुत सारे आउटपुट उत्पन्न करते हैं I मुझे यह आउटपुट इसे अपनी निर्देशिका (एस) में रखने के लिए क्लीनर मिल रहा है मैंने जो लिखा है वह एक निर्देशिका के अस्तित्व की जांच करेगी और इसमें स्थानांतरित हो जाएगी, या निर्देशिका बनायेगी और फिर उसमें जायेंगी क्या यह दृष्टिकोण करने का एक बेहतर तरीका है?

mainDir <- "c:/path/to/main/dir" subDir <- "outputDirectory" if (file.exists(subDir)){ setwd(file.path(mainDir, subDir)) } else { dir.create(file.path(mainDir, subDir)) setwd(file.path(mainDir, subDir)) } 

वेब के समाधान से एकत्रित समाधान "निर्देशिका के अस्तित्व की जाँच करें और यदि मौजूद नहीं है तो बनाएं"

showWarnings = FALSE उपयोग करें showWarnings = FALSE :

 dir.create(file.path(mainDir, subDir), showWarnings = FALSE) setwd(file.path(mainDir, subDir)) 

अगर निर्देशिका पहले से मौजूद है, तो dir.create() क्रैश नहीं करता, यह केवल एक चेतावनी प्रिंट करता है। इसलिए यदि आप चेतावनियों को देखकर रह सकते हैं, तो ऐसा करने में कोई समस्या नहीं है:

 dir.create(file.path(mainDir, subDir)) setwd(file.path(mainDir, subDir)) 

16 अप्रैल, 2015 तक, R 3.2.0 जारी करने के साथ, dir.exists() नामक एक नया फ़ंक्शन dir.exists() । इस फ़ंक्शन का उपयोग करने के लिए और यदि वह मौजूद नहीं है तो निर्देशिका बनाएं, तो आप इसका उपयोग कर सकते हैं:

 ifelse(!dir.exists(file.path(mainDir, subDir)), dir.create(file.path(mainDir, subDir)), FALSE) 

यह FALSE हो जाएगी यदि निर्देशिका पहले से मौजूद है या दुर्गम है, और TRUE अगर यह मौजूद नहीं है लेकिन सफलतापूर्वक बनाया गया था

ध्यान दें कि डायरेक्टरी मौजूद है, बस यह जांचने के लिए कि आप उपयोग कर सकते हैं

 dir.exists(file.path(mainDir, subDir)) 

सामान्य संरचना के संदर्भ में मैं निर्देशिका निर्माण के संबंध में निम्नलिखित संरचना की सिफारिश करेगा। यह सबसे संभावित मुद्दों को कवर करेगा और डायरेक्टरी निर्माण के साथ किसी भी अन्य मुद्दे को dir.create कॉल द्वारा पता लगाया जाएगा।

 mainDir <- "~" subDir <- "outputDirectory" if (file.exists(paste(mainDir, subDir, "/", sep = "/", collapse = "/"))) { cat("subDir exists in mainDir and is a directory") } else if (file.exists(paste(mainDir, subDir, sep = "/", collapse = "/"))) { cat("subDir exists in mainDir but is a file") # you will probably want to handle this separately } else { cat("subDir does not exist in mainDir - creating") dir.create(file.path(mainDir, subDir)) } if (file.exists(paste(mainDir, subDir, "/", sep = "/", collapse = "/"))) { # By this point, the directory either existed or has been successfully created setwd(file.path(mainDir, subDir)) } else { cat("subDir does not exist") # Handle this error as appropriate } 

यह भी ध्यान रखें कि यदि ~/foo मौजूद नहीं है, तो dir.create('~/foo/bar') को कॉल विफल होगा जब तक कि आप recursive = TRUE निर्दिष्ट नहीं करते हैं।

निर्देशिका के अस्तित्व की जांच करने के लिए file.exists () का उपयोग मूल पोस्ट में एक समस्या है। अगर सबडीर में मौजूदा फ़ाइल का नाम शामिल है (केवल एक पथ के बजाय), file.exists () TRUE को वापस करेगा, लेकिन setwd () को कॉल विफल होगा क्योंकि आप फ़ाइल को इंगित करने के लिए कार्यशील निर्देशिका सेट नहीं कर सकते।

मैं file_test (op = "-d", subDir) के उपयोग की सिफारिश करता हूं, जो subDir एक मौजूदा निर्देशिका है अगर "TRUE" लौटाएगा, लेकिन FALSE अगर सबडीर एक मौजूदा फ़ाइल या एक गैर-मौजूद फ़ाइल या निर्देशिका है। इसी प्रकार, एक फाइल की जांच सेशन = "- f" के साथ पूरा किया जा सकता है।

इसके अतिरिक्त, जैसा कि एक और टिप्पणी में वर्णित है, कार्यशील निर्देशिका आर वातावरण का हिस्सा है और उपयोगकर्ता द्वारा नियंत्रित किया जाना चाहिए, स्क्रिप्ट नहीं। लिपियों को, आदर्श रूप से, आर पर्यावरण को बदलना नहीं चाहिए। इस समस्या का समाधान करने के लिए, मैं एक विश्वव्यापी उपलब्ध निर्देशिका को स्टोर करने के लिए विकल्प () का उपयोग कर सकता हूं जहां मुझे अपने सारे आउटपुट चाहिए

तो, निम्न समाधान पर विचार करें, जहां कुछ यूनिकटैग केवल नाम के लिए एक प्रोग्रामर-परिभाषित उपसर्ग है, जिससे यह संभव नहीं है कि एक ही नाम के साथ एक विकल्प पहले से मौजूद है। (उदाहरण के लिए, यदि आप "फ़िलर" नामक पैकेज विकसित कर रहे थे, तो आप filer.mainDir और filer.subDir का उपयोग कर सकते हैं)।

निम्नलिखित कोड का उपयोग विकल्प को सेट करने के लिए किया जाएगा जो बाद में अन्य स्क्रिप्ट में उपयोग के लिए उपलब्ध हैं (इस प्रकार एक स्क्रिप्ट में setwd () का उपयोग करने से बचने के लिए), और आवश्यक होने पर फ़ोल्डर बनाने के लिए:

 mainDir = "c:/path/to/main/dir" subDir = "outputDirectory" options(someUniqueTag.mainDir = mainDir) options(someUniqueTag.subDir = "subDir") if (!file_test("-d", file.path(mainDir, subDir)){ if(file_test("-f", file.path(mainDir, subDir)) { stop("Path can't be created because a file with that name already exists.") } else { dir.create(file.path(mainDir, subDir)) } } 

इसके बाद, उप-डायरेयर में फ़ाइल को हेरफेर करने के लिए आवश्यक किसी भी बाद की स्क्रिप्ट में, आप ऐसा कुछ इस्तेमाल कर सकते हैं:

 mainDir = getOption(someUniqueTag.mainDir) subDir = getOption(someUniqueTag.subDir) filename = "fileToBeCreated.txt" file.create(file.path(mainDir, subDir, filename)) 

यह समाधान उपयोगकर्ता के नियंत्रण में काम कर रहे निर्देशिका को छोड़ देता है।

मुझे 2.15.3 आर आर के साथ एक मुद्दा था, जिससे एक साझा नेटवर्क ड्राइव पर बार-बार पेड़ की संरचना बनाने की कोशिश करते समय मुझे अनुमति त्रुटि मिलती है।

इस अजीबता के आसपास पाने के लिए मैन्युअल रूप से संरचना बनाते हैं;

 mkdirs <- function(fp) { if(!file.exists(fp)) { mkdirs(dirname(fp)) dir.create(fp) } } mkdirs("H:/foo/bar") 

यह जानने के लिए कि कोई पथ एक वैध निर्देशिका है:

 file.info(cacheDir)[1,"isdir"] 

file.info अंत पर एक स्लेश के बारे में परवाह नहीं है

file.exists । Windows पर file.exists एक निर्देशिका के लिए असफल हो जायेगी यदि वह स्लैश में समाप्त हो जाती है, और उसके बिना सफल होती है। इसलिए इसका निर्धारण नहीं किया जा सकता है कि पथ एक निर्देशिका है या नहीं।

 file.exists("R:/data/CCAM/CCAMC160b_echam5_A2-ct-uf.-5t05N.190to240E_level1000/cache/") [1] FALSE file.exists("R:/data/CCAM/CCAMC160b_echam5_A2-ct-uf.-5t05N.190to240E_level1000/cache") [1] TRUE file.info(cacheDir)["isdir"] 

यह सरल जांच है , और डीआईआर बनाता है अगर मौजूद नहीं है:

 ## Provide the dir name(ie sub dir) that you want to create under main dir: output_dir <- file.path(main_dir, sub_dir) if (!dir.exists(output_dir)){ dir.create(output_dir) } else { print("Dir already exists!") }