मुझे एक फ़ोल्डर मिला है:
c: \ परीक्षण
मैं इस कोड की कोशिश कर रहा हूँ:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");
मुझे अपवाद मिलता है:
फ़ाइल पहले से ही मौजूद है
आउटपुट निर्देशिका निश्चित रूप से मौजूद है और इनपुट फ़ाइल है।
मुझे एक फ़ोल्डर मिला है:
c: \ परीक्षण
मैं इस कोड की कोशिश कर रहा हूँ:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test");
मुझे अपवाद मिलता है:
फ़ाइल पहले से ही मौजूद है
आउटपुट निर्देशिका निश्चित रूप से मौजूद है और इनपुट फ़ाइल है।
जवाबों:
आपको इसे किसी अन्य फ़ाइल (एक फ़ोल्डर के बजाय) में स्थानांतरित करने की आवश्यकता है, इसका उपयोग नाम बदलने के लिए भी किया जा सकता है।
ले जाएँ:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test\SomeFile.txt");
नाम बदलें:
File.Move(@"c:\test\SomeFile.txt", @"c:\test\SomeFile2.txt");
आपके उदाहरण में "फ़ाइल पहले से मौजूद है" इसका कारण यह है, क्योंकि एक्सटेंशन के बिना C:\test\Test
फ़ाइल बनाने की कोशिश की जाती है Test
, लेकिन ऐसा नहीं कर सकते क्योंकि एक फ़ोल्डर पहले से ही समान नाम के साथ मौजूद है।
आपको क्या चाहिए:
if (!File.Exists(@"c:\test\Test\SomeFile.txt")) {
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test\SomeFile.txt");
}
या
if (File.Exists(@"c:\test\Test\SomeFile.txt")) {
File.Delete(@"c:\test\Test\SomeFile.txt");
}
File.Move(@"c:\test\SomeFile.txt", @"c:\test\Test\SomeFile.txt");
यह या तो होगा:
संपादित करें: मुझे अपना उत्तर स्पष्ट करना चाहिए, भले ही यह सबसे अधिक उत्कीर्ण हो! File.Move का दूसरा पैरामीटर गंतव्य फ़ाइल होना चाहिए - एक फ़ोल्डर नहीं । आप दूसरे पैरामीटर को डेस्टिनेशन फोल्डर के रूप में निर्दिष्ट कर रहे हैं, न कि डेस्टिनेशन फाइलनेम - जो कि File.Move के लिए आवश्यक है। तो, आपका दूसरा पैरामीटर होना चाहिए c:\test\Test\SomeFile.txt
।
व्यक्तिगत रूप से मुझे यह विधि पसंद है। यह गंतव्य पर फ़ाइल को अधिलेखित कर देगा, स्रोत फ़ाइल को हटा देगा और प्रतिलिपि के विफल होने पर स्रोत फ़ाइल को हटाने से भी रोक देगा।
string source = @"c:\test\SomeFile.txt";
string destination = @"c:\test\test\SomeFile.txt";
try
{
File.Copy(source, destination, true);
File.Delete(source);
}
catch
{
//some error handling
}
File.Copy , File.Delete
हैं File.Move
?
आप P / Invoke कर सकते हैं MoveFileEx()
- ( ) के लिए 11 पास करेंflags
MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING | MOVEFILE_WRITE_THROUGH
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", SetLastError=true, CharSet=CharSet.Unicode)]
static extern bool MoveFileEx(string existingFileName, string newFileName, int flags);
या, आप बस कॉल कर सकते हैं
Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(existingFileName, newFileName, true);
संदर्भ के रूप में Microsoft.VisualBasic जोड़ने के बाद।
यदि फ़ाइल वास्तव में मौजूद है और आप इसे नीचे दिए गए कोड का उपयोग करना चाहते हैं:
string file = "c:\test\SomeFile.txt"
string moveTo = "c:\test\test\SomeFile.txt"
if (File.Exists(moveTo))
{
File.Delete(moveTo);
}
File.Move(file, moveTo);
File.Move के लिए डॉक्स के अनुसार "मौजूद होने पर कोई अधिलेखित नहीं होता है" पैरामीटर। आपने गंतव्य फ़ोल्डर निर्दिष्ट करने का प्रयास किया , लेकिन आपको पूर्ण फ़ाइल विनिर्देश देना होगा।
डॉक्स को फिर से पढ़ना ("एक नया फ़ाइल नाम निर्दिष्ट करने के लिए विकल्प प्रदान करना"), मुझे लगता है कि गंतव्य फ़ोल्डर कल्पना में बैकस्लैश जोड़ना काम कर सकता है।
Move(String, String, Boolean)
बजाय कॉल करें । लेकिन ऐसा लगता है कि एक गलती है?
1)। C # के साथ .net Core 3.0 और उसके बाद, अब एक तीसरा बूलियन पैरामीटर है:
देख https://docs.microsoft.com/en-us/dotnet/api/system.io.file.move?view=netcore-3.1
In .NET Core 3.0 and later versions, you can call Move(String, String, Boolean) setting the parameter overwrite to true, which will replace the file if it exists.
2) .Net के अन्य सभी संस्करणों के लिए, https://stackoverflow.com/a/42224803/887092 सबसे अच्छा जवाब है। ओवरराइट के साथ कॉपी करें, फिर स्रोत फ़ाइल को हटा दें। यह बेहतर है क्योंकि यह इसे एक परमाणु संचालन बनाता है। (मैंने इसके साथ एमएस डॉक्स को अपडेट करने का प्रयास किया है)
कोशिश करो Microsoft.VisualBasic.FileIO.FileSystem.MoveFile(Source, Destination, True)
। अंतिम पैरामीटर ओवरराइट स्विच है, जिसमें System.IO.File.Move
नहीं है।
यदि आपके पास नए स्थान में पहले से मौजूद फ़ाइल को हटाने का विकल्प नहीं है, लेकिन फिर भी मूल स्थान से हटने और हटाने की आवश्यकता है, तो यह नाम बदलने की चाल काम कर सकती है:
string newFileLocation = @"c:\test\Test\SomeFile.txt";
while (File.Exists(newFileLocation)) {
newFileLocation = newFileLocation.Split('.')[0] + "_copy." + newFileLocation.Split('.')[1];
}
File.Move(@"c:\test\SomeFile.txt", newFileLocation);
यह एकमात्र मानता है '।' फ़ाइल नाम एक्सटेंशन से पहले है। यह एक्सटेंशन से पहले फ़ाइल को दो में विभाजित करता है, "_copy" संलग्न करता है। के बीच में। यह आपको फ़ाइल को स्थानांतरित करने देता है, लेकिन एक प्रतिलिपि बनाता है यदि फ़ाइल पहले से मौजूद है या प्रतिलिपि की एक प्रतिलिपि पहले से मौजूद है, या प्रतिलिपि की प्रतिलिपि मौजूद है ...;)