سؤال

ويبدو أنني لا يمكن نقل الملفات على وحدات التخزين المختلفة باستخدام Directory.Move.

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

هل لديك أي خيار آخر؟

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

المحلول

وبغض النظر عن وجود أو عدم Directory.Move (أو أي وظيفة أخرى) تنفيذ هذه الخطوة بين وحدات التخزين، سيكون أساسا أن تفعل نسخ وحذف أي حال تحتها. حتى إذا كنت ترغب في زيادة سرعة، وهذا لن يحدث. أعتقد أن أفضل حل هو إرسال بنفسك وظيفة الخطوة قابلة لإعادة الاستخدام، والذي سيحصل على تسمية وحدة التخزين (C:، D :) من من وإلى مسارات، ومن ثم إما إجراء نقل أو نسخ + حذف عند الضرورة

نصائح أخرى

لمعرفتي لا توجد وسيلة أخرى ولكن حذف دليل لديها الصيد: للقراءة فقط قد يسبب الملفات على greeve UnauthorizedAccessException عند حذف دليل وكافة محتوياته

 public void removeReadOnlyDeep(string directory)
    {
        string[] files = Directory.GetFiles(directory);
        foreach (string file in files)
        {
            FileAttributes attributes = File.GetAttributes(file);
            if ((attributes & FileAttributes.ReadOnly) != 0)
            {
                File.SetAttributes(file, ~FileAttributes.ReadOnly);
            }
        }
        string[] dirs = Directory.GetDirectories(directory);
        foreach (string dir in dirs)
        {
            removeReadOnlyDeep(dir);
        }
    }

وهذا recurses دليل وunsets كل قراءة الأعلام فقط. اتصل قبل Directory.Delete:)

وخيار أسهل سيكون، إضافة مرجع إلى مساحة الاسم Microsoft.VisualBasic واستخدام الأسلوب MoveDirectory، التي يمكن ان تتحرك عبر وحدات التخزين.

Microsoft.VisualBasic.FileIO.FileSystem.MoveDirectory(sourceDirName, destDirName);

وحاول استخدام هذا:

public static void RobustMove(string sourceDirectory, string destDirectory)
{
    //move if directories are on the same volume
    if (Path.GetPathRoot(source) == Path.GetPathRoot(destination))
    {
        Directory.Move(source, destination);
    }
    else
    {        
        CopyDirectoryRecursive(source, destination);
        Directory.Delete(source, true);
    }
}

وستجد CopyDirectoryRecursive وظيفة هنا :

وهذا ينبغي أن يكون العمل حتى يمكنك استخدام <لأ href = "http://lifehacker.com/5986883/how-to-combine-multiple-hard-drives-into-one-volume-for-cheap-high-capacity -التخزين "يختلط =" نوفولو noreferrer "> امتدت حجم أو رمز يربط إلى قرص فعلي آخر.

لتكون أكثر قوة يمكنك تحسين هذه الوظيفة لاستخدام نقل حتى يتم طرح System.IO .Exception ومن ثم التحول إلى نسخ وحذف.

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