क्या फ़ाइल को स्थानांतरित करने के इन दो तरीकों के बीच कोई अंतर है?FileInfo.MoveTo() बनाम File.Move()
System.IO.FileInfo f = new System.IO.FileInfo(@"c:\foo.txt");
f.MoveTo(@"c:\bar.txt");
//vs
System.IO.File.Move(@"c:\foo.txt", @"c:\bar.txt");
क्या फ़ाइल को स्थानांतरित करने के इन दो तरीकों के बीच कोई अंतर है?FileInfo.MoveTo() बनाम File.Move()
System.IO.FileInfo f = new System.IO.FileInfo(@"c:\foo.txt");
f.MoveTo(@"c:\bar.txt");
//vs
System.IO.File.Move(@"c:\foo.txt", @"c:\bar.txt");
इस MSDN पेज http://msdn.microsoft.com/en-us/library/akth6b1k.aspx में "टिप्पणी" खंड पर एक नज़र डालें:
आप एक वस्तु कई बार पुन: उपयोग करने, FileInfo बजाय इसी स्थिर तरीकों में से उदाहरण विधि का उपयोग करने पर विचार जा रहे हैं फ़ाइल कक्षा, क्योंकि एक सुरक्षा जांच हमेशा आवश्यक नहीं होगी।
मैं फ़ाइल (निर्देशिका) और FileInfo (DirectoryInfo) कक्षाओं के बीच यह अंतर सबसे महत्वपूर्ण है।
युपीडी: समान प्रश्न https://stackoverflow.com/a/1324808/380123
वाया Redgate परावर्तक:
File.Move()
public static void Move(string sourceFileName, string destFileName)
{
if ((sourceFileName == null) || (destFileName == null))
{
throw new ArgumentNullException((sourceFileName == null) ? "sourceFileName" : "destFileName", Environment.GetResourceString("ArgumentNull_FileName"));
}
if ((sourceFileName.Length == 0) || (destFileName.Length == 0))
{
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), (sourceFileName.Length == 0) ? "sourceFileName" : "destFileName");
}
string fullPathInternal = Path.GetFullPathInternal(sourceFileName);
new FileIOPermission(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, new string[] { fullPathInternal }, false, false).Demand();
string dst = Path.GetFullPathInternal(destFileName);
new FileIOPermission(FileIOPermissionAccess.Write, new string[] { dst }, false, false).Demand();
if (!InternalExists(fullPathInternal))
{
__Error.WinIOError(2, fullPathInternal);
}
if (!Win32Native.MoveFile(fullPathInternal, dst))
{
__Error.WinIOError();
}
}
और FileInfo.MoveTo()
public void MoveTo(string destFileName)
{
if (destFileName == null)
{
throw new ArgumentNullException("destFileName");
}
if (destFileName.Length == 0)
{
throw new ArgumentException(Environment.GetResourceString("Argument_EmptyFileName"), "destFileName");
}
new FileIOPermission(FileIOPermissionAccess.Write | FileIOPermissionAccess.Read, new string[] { base.FullPath }, false, false).Demand();
string fullPathInternal = Path.GetFullPathInternal(destFileName);
new FileIOPermission(FileIOPermissionAccess.Write, new string[] { fullPathInternal }, false, false).Demand();
if (!Win32Native.MoveFile(base.FullPath, fullPathInternal))
{
__Error.WinIOError();
}
base.FullPath = fullPathInternal;
base.OriginalPath = destFileName;
this._name = Path.GetFileName(fullPathInternal);
base._dataInitialised = -1;
}
मुख्य अंतर केवल मैं देख सकता हूँ File.Move
है स्थिर और FileInfo.MoveTo
नहीं है।
इसके अलावा वे लगभग एक ही कोड चलाते हैं।
हाँ मैं सहमत हूं; और FileInfo फ़ाइलसिस्टम इन्फॉर्म बनाम फ़ाइल को विरासत में प्राप्त करता है। FileSystemInfo स्पष्ट रूप से केवल मार्शलिंग को देता है, इसलिए मुझे लगता है कि FileInfo अधिक प्रबंधित मित्रवत है। – jcolebrand
एक महत्वपूर्ण अंतर में एक ही व्याख्या यह है कि FileInfo.MoveTo() गंतव्य पथ के लिए FileInfo वस्तु की filepath अपडेट कर देगा। यह स्पष्ट रूप से File.Move() का मामला नहीं है क्योंकि यह केवल स्ट्रिंग को इनपुट के रूप में उपयोग करता है।
सवाल क्या है? वे एक ही एपीआई तक पहुंचने के लिए दो अलग-अलग तरीकों से प्रतीत होते हैं। क्या आप लूप प्रदर्शन या सर्वोत्तम प्रथाओं की तलाश में हैं या ??? – jcolebrand
मैं सिर्फ उत्सुक था कि दो विधियां क्यों थीं जो बिल्कुल वही काम करती हैं। –
उम्मीद है कि नीचे दिए गए स्निपेट आपको दिखाएंगे कि वे अलग-अलग कैसे हैं? इसके अलावा, यदि आप लाल गेट से (वर्तमान में मुक्त) परावर्तक उत्पाद का उपयोग नहीं कर रहे हैं, तो आपको चाहिए। – jcolebrand