2013-10-28 3 views
0

나는 다음과 같은 코드를 가지고 :절약 시간

Public Class MyAccount 

Dim FileName As String = Application.StartupPath & "\myarray.txt" 
Dim AccessLog() As String 

Private Sub MyAccount_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    ListBox1.Items.Clear() 
    AccessLog = File.ReadAllLines(FileName) 
    ListBox1.Items.AddRange(AccessLog) 
    ListBox1.Items.Add("Last Login: " + DateTime.Now.ToLongTimeString()) 
    IO.File.WriteAllLines(FileName, ListBox1) 
    ListBox1.Refresh() 
End Sub 

End Class 

이 코드 내 목표는 양식 내 계정()을 열 때마다, 그것은 목록 상자에 레코드를 추가하는이며, 이 파일을 텍스트 파일에 저장하여 응용 프로그램을 닫은 후 보존합니다. 그러나, 나는 내가 그것을 최선의 방법을하고있어 확실하지 않다, 나는 오류를 받고 있어요 라인에 "파일이 선언되지 않았습니다 그것은 액세스 할 수 있습니다 인해 보호 수준에."

AccessLog = File.ReadAllLines(FileName) 

어떤 도움이라도 대단히 감사하겠습니다.

+1

디버깅 할 때 정확히 어떤 오류가 발생합니까? 올바른 파일 이름이 보이십니까? – NoChance

+0

'Application.StartupPath'의 위치에 따라 앱에 열거 나 쓸 수있는 권한이 없을 수도 있습니다. – Plutonix

+0

@Plutonix 응용 프로그램에 확실히 읽기/쓰기 권한이 있습니다. – SCGB

답변

1

사용 다음 중 하나를

System.IO.File.ReadAllLines 

또는 다음 네임 스페이스 가져옵니다

System.IO. 
+0

" 'System.Windows.Forms.ListBox'형식의 개체를 캐스팅 할 수 없습니다. 'System.Collections.Generic.IEnumerable'1 [System.String]'을 입력하십시오." 오류. 이 일을 올바르게하고 있습니까? – SCGB

+1

메서드는 문자열 배열을 예상하는 위치 매개 변수로 ListBox 제공하므로 모든 항목을 다시 파일에 쓸 때 오류가 throw됩니다. File.AppendAllLines (http://msdn.microsoft.com/en-us/library/dd383691.aspx)를 사용하여 새 줄을 추가 할 수도 있습니다. – Markus

+0

기본적으로 항목 컬렉션의 각 항목을 반복하고 각 줄을 파일에 기록해야합니다. 한 가지 방법은 LINQ를 사용하고 결과를 배열에 캐스팅하고 WriteAllLines 메서드를 사용하는 것입니다. 나는 당신을위한 모범을 보였다. – tinstaafl

0

사용에게 ListBox.Items 수집이 파일에 쓸 수 있습니다. 한 가지 방법은 LINQ 함께 :

Private Sub MyAccount_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    ListBox1.Items.Clear() 
    AccessLog = File.ReadAllLines(FileName) 
    ListBox1.Items.AddRange(AccessLog) 
    ListBox1.Items.Add("Last Login: " + DateTime.Now.ToLongTimeString()) 
    IO.File.WriteAllLines(FileName, ListBox4.Items.Cast(Of String)().ToArray) 
    ListBox1.Refresh() 
End Sub 
0

이 파일에서 다시 쓰기 전에뿐만 아니라, 당신이 그것을에 "마지막 로그인"값을 추가 할 수있는 라인을 잡아 (문자열) 목록을 사용하여

Public Class MyAccount 

    Dim FileName As String = System.IO.Path.Combine(Application.StartupPath, "myarray.txt") 
    Dim AccessLog As New List(Of String) 

    Private Sub MyAccount_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     If System.IO.File.Exists(FileName) Then 
      AccessLog.AddRange(System.IO.File.ReadAllLines(FileName)) 
      ListBox1.Items.AddRange(AccessLog.ToArray) 
      ListBox1.Items.Add("Last Login: " + DateTime.Now.ToLongTimeString()) 
     End If 
     AccessLog.Add(DateTime.Now.ToLongTimeString()) 
     System.IO.File.WriteAllLines(FileName, AccessLog) 
    End Sub 

End Class 

Load() 이벤트 외부에서 List() 데이터가 필요하지 않은 경우 해당 데이터를 지역 사용자로 선언하여 가비지 수집하도록하십시오. 여전히 ListBox의 값에 액세스 할 수 있습니다. 그 정보로 무엇을하고 있는지에 따라 달라집니다 ...