以下功能将文件从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)
答案 0 :(得分:0)
如果要移动的文件位于需要根据Vista用户帐户控制(UAC)管理权限的位置,则需要以管理员身份运行该应用程序,如下面的右键菜单所示:
alt text http://www.trendystock.com/images/Run%20as%20administrator%20for%20Vista%20PC.jpg
如果这很麻烦,用户可以右键单击快捷方式或.exe,然后转到可以选择始终以管理员身份运行应用程序的属性。或者,如果它是一个选项,他们可以只禁用UAC。