2013-03-06 9 views
11

मैं उपयोगकर्ता से फ़ाइल नाम पाने के लिए क्यूटी उपयोग कर रहा हूँ:क्यूटी में एक फ़ाइल नाम का एक्सटेंशन निकाल देने

QString fileName = QFileDialog::getOpenFileName(this,tr("Select an image file"),"d:\\",tr("Image files(*.tiff *.tif)")); 

यह काम करता है, लेकिन मैं इसके विस्तार बिना फ़ाइल नाम जरूरत है, यह संभव है क्यूटी में ?? मैं whenn कोशिश:

QString f = QFileInfo(fileName).fileName(); 

fकी तरह है "filename.tif", लेकिन मैं इसे "फ़ाइल नाम" होना चाहता हूँ।

+0

QFileInfo :: basename() – armanali

उत्तर

3

आप splitfileName "के साथ कर सकते हैं। इस तरह विभाजक के रूप में: "।"

QString croped_fileName=fileName.split(".",QString::SkipEmptyParts).at(0); 

या QString की section फ़ंक्शन का उपयोग करने से पहले भाग लेने के लिए इस तरह:

QString croped_fileName=fileName.section(".",0,0); 
+2

यह काम नहीं करेगा अगर फ़ाइल नाम (विस्तार के बिना) में '.' भी शामिल है। – leemes

+7

क्यों पहले से 'QFileInfo' प्रदान करता है? – Angew

+3

मुझे लगता है कि शफ़्फ़ को यह भी नहीं पता था कि 'QFileInfo' पहले से ही यह प्रदान करता है। मैं पुनः स्वीकार करने के लिए वोट देता हूं। – leemes

1

आप QString::split का उपयोग कर सकते हैं और . का उपयोग उस स्थान के रूप में कर सकते हैं जहां इसे विभाजित किया जा सकता है।

QStringList list1 = str.split(".");

कि {"filename", "extenstion"} के साथ एक QStringList वापस आ जाएगी। अब आप एक्सटेंशन के बिना अपना फ़ाइल नाम प्राप्त कर सकते हैं।

+0

यह काम नहीं करेगा फ़ाइल नाम (विस्तार के बिना) भी एक '.' है या नहीं। – leemes

+1

@leemes यकीन है, लेकिन ओपी ने यह निर्दिष्ट नहीं किया है, है ना? –

+2

ठीक है, "विस्तार के बिना" थोड़ा अस्पष्ट है, खासकर जब ".tar.gz" जैसे संयुक्त एक्सटेंशन से निपटना, लेकिन उसके उदाहरण में, केवल अंतिम भाग को हटाने से अधिक समझदारी होती है। – leemes

6

एकाधिक बिंदु वाले फ़ाइल नामों का सामना करने के लिए, आखिरी व्यक्ति को ढूंढें और उस तक सबस्ट्रिंग लें।

int lastPoint = fileName.lastIndexOf("."); 
QString fileNameNoExt = fileName.left(lastPoint); 
पाठ्यक्रम इसमें से

(और चाहिए) पुनः उपयोग के लिए एक सहायक समारोह के रूप में लिखा जा सकता है:

QString QFileInfo::completeBaseName() const 

रिटर्न कम से कम के साथ फ़ाइल नाम:

inline QString withoutExtension(const QString & fileName) { 
    return fileName.left(fileName.lastIndexOf(".")); 
} 
+0

ध्यान दें कि 'QFileInfo' में पहले से ही यह सहायक कार्य है। – Angew

+0

हाँ, इसे नहीं पता था। मेरा सुझाव अधिक सामान्य था: यदि आप कोड लिखते हैं जिसे पुन: उपयोग करने की सबसे अधिक संभावना है, तो इसे एक फ़ंक्शन में ले जाएं। – leemes

68

QFileInfo इस के लिए दो कार्य करता है एक्सटेंशन हटा दिया गया (file.tar.gz ->file.tar)

QString QFileInfo::baseName() const 

रिटर्न फ़ाइल नाम सबसे लंबे समय तक विस्तार के साथ हटा दिया (file.tar.gz ->file)

+8

यह सबसे सुंदर समाधान हाथ नीचे है। हालांकि 'QFileInfo' कक्षा से सावधान रहें। यह खुद को एक फाइल के चारों ओर लपेटता है और समय-समय पर इसकी गुणों की जांच करता है। यह एक प्रदर्शन समस्या हो सकती है। तो आपको जितनी जल्दी हो सके 'QFileInfo' ऑब्जेक्ट को नष्ट करना चाहिए या' setCaching (false) 'को कॉल करना चाहिए। –

संबंधित मुद्दे