2011-01-17 7 views
0

私はVB.netでこの問題に苦労しています。私のマイドキュメントにアクセスしようとするたびに、私のビデオやWindows 7のsimular、私はアクセス拒否エラーを取得します。このコードを使用するプログラムはファイルバックアップアプリケーションなので、すべてにアクセスできることが重要です。アプリはこのラインを使用して、管理者権限を持っていますWindows 7のVB.netからDocumentsフォルダにアクセスできない

のrequestedExecutionLevelレベル=「requireAdministrator」uiAccess =「偽」/>

開始するとき、私はまた素敵なUACのポップアップを取得し、確認します。

アプリはファイルに2度アクセスします。一度ファイルサイズを計算し、一度実際にファイルをコピーします。ここでは、ファイルサイズの計算コードは、私が見つけた(あるオンライン:)

Function GetFolderSize(ByVal DirPath As String, ByVal includeSubFolders As Boolean) As
Long
Try
Dim size As Long = 0
Dim diBase As New DirectoryInfo(DirPath)
Dim files() As FileInfo
If includeSubFolders Then
files = diBase.GetFiles("", SearchOption.AllDirectories)
Else
files = diBase.GetFiles("
", SearchOption.TopDirectoryOnly)
End If
Dim ie As IEnumerator = files.GetEnumerator
While ie.MoveNext And Not abort
size += DirectCast(ie.Current, FileInfo).Length
End While
Return size
Catch ex As Exception
MsgBox("Error: " & ex.Message)
Return -1
End Try
End Function

これは言って私にエラーを与える「エラー:パスcへのアクセスを:ユーザがビンセント\ドキュメントは、自分の動画が拒否されました\ \ \」

マイファイルのコピー:

my.computer.filesystem.copydirectory(filepath, newcopy, false)

は同じエラーを返します。 注:私のOSはオランダ語ですので、これらのエラーは英語のOSで全く同じではないかもしれません。私はそれらを翻訳しました。

これを修正する提案がありますか?ありがとう!

+0

このプログラムが実行される*ユーザーアカウント*の権利がここにあります。エクスプローラで確認できます。フォルダ、[プロパティ]、[セキュリティ]タブを右クリックします。それについてsuperuser.comでさらに質問してください –

答えて

0

このコードは、StartPathで始まるすべてのディレクトリのリストを返します。試しに注意してください。

Public Class Form1 

    Private Sub Button1_Click(ByVal sender As System.Object, _ 
           ByVal e As System.EventArgs) Handles Button1.Click 

     Dim startPath As New IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) 
     Dim startList As New List(Of IO.DirectoryInfo) 
     startList.AddRange(startPath.GetDirectories()) 

     Dim allDirs As New List(Of IO.DirectoryInfo) 
     allDirs.AddRange(GetDirs(startList)) 

     Dim listOfiles As New List(Of String) 
     For Each d As IO.DirectoryInfo In allDirs 
      Try 
       listOfiles.AddRange(IO.Directory.GetFiles(d.FullName, "*.*")) 
      Catch SecEx As UnauthorizedAccessException 
       'here is the sceurity exception 
       Debug.WriteLine(d.FullName) 
      End Try 
     Next 
    End Sub 


    Private Function GetDirs(ByVal theDirs As List(Of IO.DirectoryInfo)) As List(Of IO.DirectoryInfo) 
     'add directories. called recursively. 
     Dim rv As New List(Of IO.DirectoryInfo) 

     For Each d As IO.DirectoryInfo In theDirs 
      rv.Add(d) 
      Dim foo As List(Of IO.DirectoryInfo) = GetDirs(Me.GetSubDirs(d)) 
      If Not (foo Is Nothing OrElse foo.Count = 0) Then 
       rv.AddRange(foo) 
      End If 
     Next 
     Return rv 
    End Function 

    Private Function GetSubDirs(ByVal theDir As IO.DirectoryInfo) As List(Of IO.DirectoryInfo) 
     Dim theSubDirs As New List(Of IO.DirectoryInfo) 
     Try 
      theSubDirs.AddRange(theDir.GetDirectories.ToList) 
     Catch SecEx As UnauthorizedAccessException 
      'here is the sceurity exception 
      'Debug.WriteLine(theDir.FullName) 
     End Try 
     Return theSubDirs 
    End Function 

End Class 
関連する問題