Копия файла, если цель не существует или источник более новый - PullRequest
0 голосов
/ 12 ноября 2010

Мне нужно только скопировать файл с удаленного сервера на локальный ПК, если:

  1. На локальном ПК нет целевого файла.
  2. Исходный файл на сервере новее, чем целевой на локальном ПК.

Исходный файл занимает 4 МБ, поэтому я хочу избегать копирования каждый раз.

// File copy if target doesn't exist or source is newer:
if (File.Exists(filenameSource))
{
  if (File.Exists(filenameTarget))
  {
    DateTime dateSource = File.GetLastWriteTimeUtc(filenameSource);
    DateTime dateTarget = File.GetLastWriteTimeUtc(filenameTarget);

    if (dateTarget < dateSource)
    {
      File.Copy(filenameSource, filenameTarget, true);
    }
  }
  else
  {
    File.Copy(filenameSource, filenameTarget);
  }
}

Мои вопросы:

  1. Приведенный выше код все еще должен передавать 4 МБ данных для получения измененной временной метки источника?

  2. Достаточно ли сравнения измененных временных меток для того, что я пытаюсь сделать? Или я должен также сравнить созданные метки времени?

(# 2 Может показаться глупым вопросом, но что если я уроню новый исходный файл с измененной временной меткой, которая старше модифицированной временной метки цели?) Бонус:

Что если я напишу приведенный выше код в VBScript? Должен ли приведенный ниже код передавать 4 МБ данных для создания объекта fileSource?

if filesys.FileExists(strSource) then
  if filesys.FileExists(strTarget) then
    set fileSource = filesys.GetFile(strSource)
    set fileTarget = filesys.GetFile(strTarget)
    dateSource = fileSource.DateLastModified 
    dateTarget = fileTarget.DateLastModified 
    if dateTarget < dateSource then
      filesys.CopyFile strSource, strTarget, true
    end if
  else
    filesys.CopyFile strSource, strTarget, false
  end if
end if 

Ответы [ 2 ]

1 голос
/ 12 ноября 2010

Если вы используете общий файловый ресурс UNC или что-то подобное, нет, он не загрузит весь файл, чтобы проверить только дату. Относительно # 2: последнего изменения должно быть достаточно, так как последнее изменение никогда не должно быть старше, чем дата создания.

1 голос
/ 12 ноября 2010
  1. Для доступа к размеру и временным меткам не требуется извлекать весь файл из сети.

  2. Я бы включил созданный, измененный и размер.Чтобы быть в полной безопасности, вам нужно вычислить хеш, но для этого требуется доступ к 4 МБ.Только вы можете определить, является ли это приемлемым риском.

И VBScript должен быть таким же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...