إعادة تسمية الدليل مع نفس الاسم حالة مختلفة

StackOverflow https://stackoverflow.com/questions/1622597

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا أحاول إعادة تسمية الدليل في ج # إلى اسم هو نفسه فقط مع اختلاف الحال.

وعلى سبيل المثال: F: \ اختبار لو: \ TEST

ولقد حاول هذا الرمز:

var directory = new DirectoryInfo("f:\\test");
directory.MoveTo("f:\\TEST");

ووأحصل على IOException - المصدر ومسار الوجهة يجب أن تكون مختلفة. لقد حاولت أيضا Directory.Move () مع نفس النتيجة.

وكيف يتم ذلك؟ هل لديك لإنشاء دليل مؤقت منفصل، نقل الملفات الواردة من الدليل الأصلي إلى دليل مؤقت، ثم حذف الأصلي، وإعادة تسمية الدليل المؤقت؟

هل كانت مفيدة؟

المحلول

حسنا، أنت لا تحتاج إلى إنشاء دليل منفصل ونقل كل شيء. مجرد إعادة تسمية المجلد إلى شيء مختلف ومن ثم العودة إلى الاسم الذي تريده:

var dir = new DirectoryInfo(@"F:\test");
dir.MoveTo(@"F:\test2");
dir.MoveTo(@"F:\TEST");

نصائح أخرى

لماذا لا إعادة تسمية temp الدليل ومن ثم إعادة تسمية مرة أخرى لTEST؟

وحتى لو كان DirectoryInfo.MoveTo طريقة صافي يطرح استثناء إذا كان الاسم هو نفسه، يمكنك الاتصال على ويندوز API <لأ href = "https://msdn.microsoft.com/en-us/library/windows/desktop / aa365239 "يختلط =" نوفولو "> MoveFile وظيفة مثل هذا لتعيين غلاف اسم الدليل:

bool success = MoveFile(dirInfo.FullName, dirInfo.FullName);

مع هذا الإعلان خارجي ...:

[DllImport("kernel32", SetLastError = true)]
private static extern bool MoveFile(string lpExistingFileName, string lpNewFileName);

وأنه يعمل بشكل جيد بالنسبة لي عندما يختلف الاسم في حالة فقط. لم أحاول اصفا اياه بانه مثل هذا عندما يكون اسم هو بالفعل بالضبط كما هو محدد.

وهذا له ميزة أن الدليل لم يختفي تحت اسم الأصلي.

ومن مساوئها على الرغم من أنه يعمل فقط على ويندوز.

والجواب هو نعم في هذه الحالة - نظام الملفات نفسها لا ترى اثنين مختلفة مثل، لذلك ستحتاج إلى حذف وإضافة كاسم جديد (أو نقل / حذف / نقل كما اقترحتم)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top