1

ログファイルを作成する必要のある小さなVBアプリがありますが、見やすいので、理想的にはユーザーのデスクトップにそれを配置したいと思います。

ただし、ファイル(* .txtファイル)を作成しようとすると、次のエラーが発生します-

タイプ'System.UnauthorizedAccessException'の最初のチャンスの例外がmscorlib.dllで発生しました

さて、これが権限の問題であることは明らかですが、回避方法がわからないので、誰かが私を助けてくれるのではないかと思います。ありがとう。

ファイルを作成するための完全なコード(MSDNから取得し、ごくわずかに変更)-

Imports System
Imports System.IO
Imports System.Text

Module write_text

    Public Class Log_File

        '*'
        ' Createa a log file on the users desktop and adds the 'output' text to it
        '
        ' @param required string output The text to output to the log
        '*'
        Public Shared Sub write_to_file(ByVal output As String)

            Dim path As String      ' The path to where the file to create and write should be saved
            Dim file_name As String ' The name of the log file that is to be created

            Debug.Print(vbCrLf & "    write_to_file(){" & vbCrLf)

            ' Set the error handler
            On Error GoTo ExitError

            path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)
            file_name = "MusicRenaming - " & Date.Today & ".txt"
            Debug.Print("        Log file: " & path & "\" & file_name)

            ' Check if the file exists
            If File.Exists(path) = False Then

                ' Create a file to write too. 
                Dim sw As StreamWriter = File.CreateText(path)
                sw.WriteLine("Hello")
                sw.WriteLine("And")
                sw.WriteLine("Welcome")
                sw.Flush()
                sw.Close()
                Debug.Print("        File had to be created")

            End If

            ' Open the file to write too
            Dim sr As StreamReader = File.OpenText(path)
            Do While sr.Peek() >= 0
                Console.WriteLine(sr.ReadLine())
                Debug.Print("        Output to file complete")
            Loop

            ' Close the file
            sr.Close()

            Debug.Print(vbCrLf & "    }")

ExitError:
            If Err.Number <> 0 Then functions.error_handler()

        End Sub

    End Class

End Module

しないでください-現在、この関数は特に機能していないことに気付きました。最初にファイルを作成しようとしているだけで、それから作業を進めます。

4

1 に答える 1

0

このスレッドに投稿された@RubensFariasによる回答のおかげで、この問題を修正することができました。

私はまたtry...catch、@ minitechによって提案された方法を私の元の質問へのコメントに組み込んだので、うまくいけば、彼は私が彼の懸念に対処したことに満足しています:)

Imports System.IO

Module write_text

    Public Class Log_File

        '*'
        ' Createa a log file on the users desktop and adds the 'output' text to it
        '
        ' @param required string output The text to output to the log
        '*'
        Public Shared Sub write_to_file(ByVal output As String)

            Dim file_name As String     ' The name of the log file that is to be created
            Dim file_path As String     ' The full path to where the file to create and write should be saved
            Dim file_exists As Boolean  ' Whether or not the file already exists

            Try

                file_name = "MusicRenaming - " & DateTime.Today.ToString("dd-mm-yyyy") & ".txt"
                file_path = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) & "\" & file_name
                file_exists = File.Exists(file_path)

                Using sw As New StreamWriter(File.Open(file_path, FileMode.OpenOrCreate))
                    sw.WriteLine(output)
                End Using

            Catch oError As Exception
                functions.error_handler(oError)
            End Try

        End Sub

    End Class

End Module
于 2013-03-02T21:16:08.757 に答える