Код: Выделить всё
FileSystem.CopyDirectory(sourcePath, targetPath, overwrite);
Directory.SetCreationTimeUtc (targetPath, Directory.GetCreationTimeUtc (sourcePath));
Directory.SetLastAccessTimeUtc(targetPath, Directory.GetLastAccessTimeUtc(sourcePath));
Directory.SetLastWriteTimeUtc (targetPath, Directory.GetLastWriteTimeUtc (sourcePath));
Directory.Delete(sourcePath, true);
< /code>
Однако все три из этих методов "Directory.set" не удастся, если Explorer File открыт, и, похоже, даже не имеет значения, является ли рассматриваемый каталог в настоящее время в исследователе файлов или нет (редактировать: я подозреваю, что это имеет что -то делать с быстрым доступом, но причина не особенно важна). Он бросает ioException < /code>, в котором говорится: «Процесс не может получить доступ к файлу 'c: \ myfolder', потому что он используется другим процессом». Есть ли альтернативный способ изменения временной метки, которая не бросает ошибку, когда открыт исследователь файлов? Должен ли я автоматически закрыть исследователь файлов? Или, если моему приложению просто нужно пройти неудачу, то я бы хотел потерпеть неудачу до того, как пройдут какие -либо операции с файлами. Есть ли способ заранее определить, если Directory.SetCreationTimeUTC () заранее. Вот какой -то пример кода, который вы можете использовать, чтобы попробовать воссоздать проблему: < /p>
Код: Выделить всё
using System;
using System.IO;
namespace CreationTimeTest
{
class Program
{
static void Main( string[] args )
{
try
{
DirectoryInfo di = new DirectoryInfo( @"C:\Test" );
di.CreationTimeUtc = DateTime.UtcNow;
Console.WriteLine( di.FullName + " creation time set to " + di.CreationTimeUtc );
}
catch ( Exception ex )
{
Console.WriteLine( ex );
//throw;
}
finally
{
Console.ReadKey( true );
}
}
}
}
< /code>
create c: \ test < /code>, build creationtimetest.exe и запустить его. Это происходит, если папка C: \ test Подробнее здесь: https://stackoverflow.com/questions/460 ... er-is-open