CreationDate файла изменяется в зависимости от контекста. - PullRequest
1 голос
/ 27 января 2012

Я запускаю какой-то базовый модульный тест на дату создания файлов, и я запустил в странном случае (по крайней мере для меня):

    [TestInitialize]
    public void Initialize()
    {
        if (File.Exists(UncFile))
            File.Delete(UncFile);
        if (File.Exists(LocalFile))
            File.Delete(LocalFile);
    }

    [TestMethod]
    public void ProxyFile_DeleteOlderFileOnLocalSystem()
    {
        using (StreamWriter sw = File.CreateText(LocalFile)) { }
        Thread.Sleep(50);

        using (StreamWriter sw = File.CreateText(UncFile)) { }
        Thread.Sleep(50);

        DateTime UncDate = File.GetCreationTime(UncFile);
        DateTime OldLocalDate = File.GetCreationTime(LocalFile);

        Assert.IsTrue(UncDate > OldLocalDate);
    }

Работает отлично! тогда как:

    [TestInitialize]
    public void Initialize()
    {
        using (StreamWriter sw = File.CreateText(UncFile)) { }

        if (File.Exists(UncFile))
            File.Delete(UncFile);
        if (File.Exists(LocalFile))
            File.Delete(LocalFile);
    }


    [TestMethod]
    public void ProxyFile_DeleteOlderFileOnLocalSystem()
    {
        using (StreamWriter sw = File.CreateText(LocalFile)) { }
        Thread.Sleep(50);

        using (StreamWriter sw = File.CreateText(UncFile)) { }
        Thread.Sleep(50);

        DateTime UncDate = File.GetCreationTime(UncFile);
        DateTime OldLocalDate = File.GetCreationTime(LocalFile);

        Assert.IsTrue(UncDate > OldLocalDate);
    }

дает мне ложь ... Единственная разница между двумя существами:

using (StreamWriter sw = File.CreateText(UncFile)) { }

Но я удаляю этот файл сразу после:

if (File.Exists(UncFile))
                File.Delete(UncFile);

Может ли кто-нибудь указать мне, что я делаю неправильно?

ТНХ.

[EDIT]

дата во втором примере похожа на первый файл UNC Created:

Debug.Print("UncFile : " + File.GetCreationTime(UncFile).Ticks);
->
UncFile   (Init) : 634632802355468953
UncFile   (Test) : 634632802355468953
LocalFile (Test) : 634632802355618962
* * Тысяча двадцать-одина [/ EDIT] * * тысяча двадцать-дв

1 Ответ

1 голос
/ 27 января 2012

ОК нашел его:

File.GetCreationTime Method

Примечание. Этот метод может возвращать неточное значение, поскольку он использует нативные функции, значения которых не могут постоянно обновляться операционная система.

Благодаря Raymond Link's другой ответ в Stackoverflow, вот решение:

 using (StreamWriter sw = File.CreateText(LocalFile)) { }
            File.SetCreationTime(LocalFile,DateTime.Now);
            Thread.Sleep(50);

            using (StreamWriter sw = File.CreateText(UncFile)) { }
            File.SetCreationTime(UncFile, DateTime.Now);
            Thread.Sleep(50);

            DateTime UncDate = File.GetCreationTime(UncFile);
            DateTime OldLocalDate = File.GetCreationTime(LocalFile);

            Assert.IsTrue(UncDate > OldLocalDate);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...