2012-06-26 14 views
12

मेरे पास एक ऐसा एप्लिकेशन है जो अवैध निर्देशिका बनाता है ... उदा। c:\Program Files\somedirectory. - अवधि निर्देशिका नाम का एक हिस्सा है।डेल्फी: एक अवैध फ़ोल्डर का नाम बदलना

अब, मैंने डेल्फी में फ़ाइल का नाम बदलने के बारे में जो कुछ भी पता है, मैंने कोशिश की है।

  • RenameFile (file1, करें 2)
  • MoveFile (File1, File2)
  • आदि ...

मैं खिड़कियों कम हो रही पथ ExtractShortPathName की कोशिश की है, लेकिन यह सिर्फ एक खाली स्ट्रिंग रिटर्न । (commandPrompt में कॉल करने के लिए: "नाम बदलें ShortOldName NewName")

अब मुझे पता है कि मैं इसे cmd में मैन्युअल रूप से कर सकते हैं, लेकिन मैं समय मेरे सभी फ़ाइलों के माध्यम से जाने के लिए खर्च करने के लिए के बारे में नहीं हूँ और यह कर;)

xshortname := ExtractFileName(ExtractShortPathName(ns + oldName)); 
    xNewName := newName; 

    cmdTxt := PWideChar('/C cd ' + ns); 
    cmdTxt2 := PWideChar(cmdTxt + '&&' + ' RENAME ' + xshortname + ' ' + #34 + xNewName + #34); 
    ShellExecute(0, nil, 'cmd.exe', cmdTxt2, nil, SW_SHOWNORMAL); 

मैं जानता हूँ कि ShellExecute सबसे अच्छा तरीका यहाँ का उपयोग करने की नहीं है:

यहाँ मेरी कोड का एक सा है। मैं सिर्फ काम करने के लिए बदबू आ रही है। मैं बाद में अनुकूलन और उचित डेल्फी कोडिंग के बारे में चिंता करूंगा।

तो मेरा सवाल है: क्या किसी को ऐसे फ़ंक्शन के बारे में पता है जो मुझे एक अवैध निर्देशिका का नाम बदलने की अनुमति देगा?

उत्तर

16

यदि आप एक विशेष तरीके से फ़ोल्डर का नाम पारित आप मानक Windows API समारोह MoveFile() उपयोग कर सकते हैं:

MoveFile('\\?\D:\invalid_dir.', '\\?\D:\invalid_dir.fixed'); 
बजाय

MoveFile('D:\invalid_dir.', 'D:\invalid_dir.fixed'); 

अधिक के बारे में यह MSDN पर पाया जा सकता है "Naming Files, Paths, and Namespaces" विषय के तहत। ध्यान दें कि यह विशेष रूप से फ़ाइल नामों में पीछे वाले बिंदुओं को डालने के खिलाफ सलाह देता है।

+0

सही काम किया। धन्यवाद! हर जगह खोजा। मुझे पता था कि निराश नहीं होगा। –

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