Следующая функция копирует файл из Source & Path
в Dest & Path
, обычно устанавливая атрибуты файла в нормальное состояние перед копированием.
Тем не менее, пользователь моего приложения сообщил о сбое при копировании файлов только для чтения, возвращая ошибку, связанную с разрешениями. Однако пользователь запускает код от имени администратора , и ошибка происходит - как ни странно - в строке SetLastWriteTimeUtc
.
Хотя код сообщает, что атрибуты файла установлены как нормальные, проводник Windows показывает, что они установлены только для чтения.
Sub CopyFile(ByVal Path As String, ByVal Source As String, ByVal Dest As String)
If IO.File.Exists(Dest & Path) Then IO.File.SetAttributes(Dest & Path, IO.FileAttributes.Normal)
IO.File.Copy(Source & Path, Dest & Path, True)
If Handler.GetSetting(ConfigOptions.TimeOffset, "0") <> "0" Then
IO.File.SetAttributes(Dest & Path, IO.FileAttributes.Normal)
IO.File.SetLastWriteTimeUtc(Dest & Path, IO.File.GetLastWriteTimeUtc(Dest & Path).AddHours(Handler.GetSetting(ConfigOptions.TimeOffset, "0")))
End If
IO.File.SetAttributes(Dest & Path, IO.File.GetAttributes(Source & Path))
End Sub
Я просто не вижу проблемы в этом коде, поэтому после долгих часов поиска решения я подумал, что один из SO VB.Net Gurus может помочь:)
Большое спасибо.
Редактировать
Фактическая ошибка
Access to the path '(..)' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at System.IO.File.OpenFile(String path, FileAccess access, SafeFileHandle& handle)
at System.IO.File.SetLastWriteTimeUtc(String path, DateTime lastWriteTimeUtc)