4

テキスト ファイルを作成し、このファイルにテキストを書き込みたいのですが、コードでテキスト ファイルを作成できません。

エラーメッセージ:

    UnauthorizedAccessExcepion was unhandled by user code
 Access to the path 'c:\save.txt' is denied.

私のコード:

 Dim fileLoc As String = "c:\save.txt"
                    Dim fs As FileStream = Nothing
                    If (Not File.Exists(fileLoc)) Then
                        fs = File.Create(fileLoc)
                        Using fs

                        End Using
                    End If
                    If File.Exists(fileLoc) Then
                        Using sw As StreamWriter = New StreamWriter(fileLoc)
                            a = "Test: " + TextBox1.Text
                            c = "=============================================="
                            sw.Write(a)
                            sw.Write(c)
                        End Using
                    End If
4

2 に答える 2

3

最近のバージョンの Windows では、C: ドライブのルートはデフォルトで読み取り専用になっています。ファイルを別のフォルダに入れてみてください。

于 2012-05-05T04:50:17.593 に答える
0

少し強迫観念が強まっていて、C ドライブのディレクトリに直接書き込みたい場合は、これを使用できます。

Imports System.Security.Principal

Module VistaSecurity

    'Declare API
    Private Declare Ansi Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
    Private Const BCM_FIRST As Int32 = &H1600
    Private Const BCM_SETSHIELD As Int32 = (BCM_FIRST + &HC)

    Public Function IsVistaOrHigher() As Boolean
        Return Environment.OSVersion.Version.Major < 6
    End Function

    ' Checks if the process is elevated
    Public Function IsAdmin() As Boolean
        Dim id As WindowsIdentity = WindowsIdentity.GetCurrent()
        Dim p As WindowsPrincipal = New WindowsPrincipal(id)
        Return p.IsInRole(WindowsBuiltInRole.Administrator)
    End Function

    ' Add a shield icon to a button
    Public Sub AddShieldToButton(ByRef b As Button)
        b.FlatStyle = FlatStyle.System
        SendMessage(b.Handle, BCM_SETSHIELD, 0, &HFFFFFFFF)
    End Sub

    ' Restart the current process with administrator credentials
    Public Sub RestartElevated()
        Dim startInfo As ProcessStartInfo = New ProcessStartInfo()
        startInfo.UseShellExecute = True
        startInfo.WorkingDirectory = Environment.CurrentDirectory
        startInfo.FileName = Application.ExecutablePath
        startInfo.Verb = "runas"
        Try
            Dim p As Process = Process.Start(startInfo)
        Catch ex As Exception
            Return 'If cancelled, do nothing
        End Try
        Application.Exit()
    End Sub

End Module
于 2012-05-05T15:00:20.087 に答える