Vista似乎阻止.net读取/更新文件属性

时间:2010-06-03 16:57:15

标签: vb.net file-io file-permissions

以下功能将文件从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)

1 个答案:

答案 0 :(得分:0)

如果要移动的文件位于需要根据Vista用户帐户控制(UAC)管理权限的位置,则需要以管理员身份运行该应用程序,如下面的右键菜单所示:

alt text http://www.trendystock.com/images/Run%20as%20administrator%20for%20Vista%20PC.jpg


如果这很麻烦,用户可以右键单击快捷方式或.exe,然后转到可以选择始终以管理员身份运行应用程序的属性。或者,如果它是一个选项,他们可以只禁用UAC。