रूबी में एक खाली फ़ाइल बनाना: "स्पर्श" बराबर?


119

रूबी में एक खाली फ़ाइल बनाने का सबसे अच्छा तरीका क्या है ?

यूनिक्स कमांड के समान कुछ, स्पर्श करें :

touch file.txt

5
आप हमेशा कर सकते हैं`touch file.txt`
मार्क थॉमस

8
@ मर्क: खिड़कियों पर भी?
मार्क-आंद्रे लाफ्यून

1
जो लोग उचित प्लेटफ़ॉर्म-स्वतंत्र प्रोग्रामिंग की परवाह करते हैं? :-)
टीजे बिडल

जवाबों:


181

FileUtils.touchऐसा लगता है कि वह क्या करता है, और दर्पण *touch आदेश:

require 'fileutils'
FileUtils.touch('file.txt')

* स्पर्श के विपरीत (1) आप केवल माइम या एनीमे को अपडेट नहीं कर सकते। यह कुछ अन्य अच्छे विकल्पों को भी याद कर रहा है।


@ 5chdn आप परेंस के बिना मतलब है? हां, विधि मापदंडों के आसपास के परकोटे (कभी-कभी) वैकल्पिक होते हैं।
डेव न्यूटन

44

यदि आप फ़ाइल हैंडल के बारे में चिंतित हैं:

File.open("foo.txt", "w") {}

से डॉक्स :

यदि वैकल्पिक कोड ब्लॉक दिया गया है, तो इसे लॉजिक के रूप में खोली गई फ़ाइल को पास किया जाएगा, और ब्लॉक समाप्त होने पर फ़ाइल ऑब्जेक्ट स्वचालित रूप से बंद हो जाएगा।


धन्यवाद, मैं नई फ़ाइल को दूसरी प्रक्रिया में भेज रहा हूं, इसलिए हैंडल को तुरंत बंद करने की आवश्यकता है।
२१:३५ पर अभि बेकर्ट

12
यह इंगित करते हुए कि यह वास्तव में दर्पण नहीं है touch- यह मौजूद होने पर फ़ाइल को अधिलेखित कर देगा।
MrTheWalrus

3
यदि यह पहले से ही मौजूद है तो एपेंड मोड का उपयोग करें और फाइल को छोटा नहीं किया जाएगा। फाइल ("foo.txt", "a") {} यह भी 'टच' नहीं करता है, लेकिन तब 'टच' (1) नहीं था प्रश्न।
जी एलन मोरिस III

"A" के प्रयोग से mtime अपडेट नहीं होता है। ("स्पर्श" उपशीर्षक था, इसलिए Google हमें ऐसे लोगों को लाता है जो रूबी स्पर्श चाहते हैं।)
मार्टिन डोरी 15'13

* nix सिस्टम पर, इस तरह से बनाए जाने पर फाइल मालिक कौन है?
इस्लाम अजाब

24

रूबी 1.9.3+ में, आप File.write(उर्फ IO.write) का उपयोग कर सकते हैं :

File.write("foo.txt", "")

पहले के संस्करण के लिए, या तो require "backports/1.9.3/file/write"उपयोग करेंFile.open("foo.txt", "w") {}


यह बहुत साफ है, लेकिन दुर्भाग्य से मुझे पीछे की ओर संगत होना चाहिए। मैं इसे भविष्य में उपयोग के लिए ध्यान में रखूंगा।
अभि बेकर्ट

2

और भी, कम लाभप्रद, लेकिन बहुत संक्षिप्त:

`touch file.txt`

3
विल कांटा अलग है, तो बहुत धीमी है।
denis.peplin

और टिप्पणियों में पहले ही उल्लेख किया गया है, जिसे मैंने पहले नहीं देखा है।
बोरिस स्टिटनिक

-1

बस एक उदाहरण:

File.open "foo.txt", "w"

1
क्या यह एक खुली फ़ाइल को पीछे छोड़ देता है, जैसे कि यह कुछ अन्य भाषाओं में होगा?
अभि बेकर्ट

4
@ आभा: यह करता है, लेकिन कचरा संग्रह इसे किसी बिंदु पर संभाल लेगा। हालांकि, इससे बचने के लिए, एक खाली ब्लॉक पास करें (माइकल कोहल का जवाब देखें)
मार्क-एंड्रे लाफ्यून जून 11'11

"कुछ बिंदु पर" कब होने वाला है? स्क्रिप्ट के अंत में, या तुरंत क्योंकि यह किसी भी चर को नहीं सौंपा गया है? मैं फाइल बना रहा हूं ताकि सिस्टम पर अन्य प्रक्रियाएं तुरंत इसके साथ काम करना शुरू कर सकें, और यदि फ़ाइल हैंडल अभी भी लिखने के लिए खुला है तो वे अवरुद्ध हो जाएंगे।
अभि बेकर्ट

1
File.open ("foo.txt", "w")। करीब () फ़ाइलहैंडल समस्या को हल करता है, लेकिन FileUtils.touch एक बेहतर समाधान है।
माइकल कैंपबेल

उस तरह खुली फ़ाइलों को हैंडल न करें :-)
sekmo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.