2013-10-08 4 views
0

사용자가 데이터를 입력 한 다음 단추를 눌러 데이터를 처리하는 텍스트 상자가 있습니다. 이제 사용자가 입력 한 데이터가 많아서 사용자에게 약간의 여유를주기 위해 단추를 누를 때마다 응용 프로그램이 데이터를 저장하므로 응용 프로그램을 닫고 다시 시작하면 텍스트 상자가 채워집니다 마지막으로 입력 한 데이터로텍스트 상자에 텍스트 저장 유지

.txt 파일을 사용하여 데이터를 저장하려고했습니다. 오직 나는 이것으로 몇 가지 어려움을 발견했다. 문제 중 하나는 응용 프로그램을 실행하려고 할 때마다 Microsoft .NET Framework에서 messagebox를 계속 가져 오는 것입니다. messagebox는 Index가 배열의 범위 밖에 있다고 표시합니다. 비록 내 코드가 내 배열의 경계를 초과하지 않는다고 생각한다.

먼저 내가 배열을 선언하고 텍스트 상자의 내용을 포함하는 변수를 작성 : 다음

string[]settings = new string[5]; 
settings[0] = openKey; 
settings[1] = secretKey; 
settings[2] = statusRequestPath; 
settings[3] = statusRequestAPI; 
settings[4] = setSeconds.ToString(); 

를 내가 작성하는 다음 코드를 사용하여 여기

그리고

내가 사용하는 코드입니다 데이터를 텍스트 파일에 저장합니다.

using (StreamWriter writeFile = new StreamWriter(@"C:\Audio Silence Detector\AudioSilenceDetector.txt")) 
{ 
    foreach (string line in settings) 
    { 
     writeFile.WriteLine(line); 
    } 
} 

그리고 나는 formload에 넣고 한 응용 프로그램에서 다시 .txt 파일의 텍스트를 넣어 :

string[] lines = System.IO.File.ReadAllLines(@"C:\Audio Silence Detector\AudioSilenceDetector.txt"); 

tbOpenKey.Text = lines[0]; 
tbSecretKey.Text = lines[1]; 
tbStatusRequestPath.Text = lines[2]; 
tbStatusRequestAPI.Text = lines[3]; 
tbSeconds.Text = lines[4]; 

나는이 내 코드를 변경하고 문제를 해결 한 것 같다 내가 가지고 있었 :

  if (lines.LongLength == 5) 
     { 
      tbOpenKey.Text = lines[0]; 
      tbSecretKey.Text = lines[1]; 
      tbStatusRequestPath.Text = lines[2]; 
      tbStatusRequestAPI.Text = lines[3]; 
      tbSeconds.Text = lines[4]; 
     } 
+3

어떤 행에서 IndexOutOfBounds 예외가 발생합니까? 나는 당신이 처음으로 응용 프로그램을 열고 거기에 읽을 텍스트 파일이나 빈 파일 중 하나가 의심됩니다. –

+0

@ NicolasTyler 언급했듯이,'if (lines! = null && lines.Length == 5) '라는 텍스트 상자를 채우기 전에 확인하십시오. – Sinatr

+0

@Sinatr'lines'은 null 일 수 없습니다. 배열 인스턴스가되거나 예외가 발생합니다. –

답변

3

파일 로딩에 문제가 있습니다.

string[] lines = System.IO.File.ReadAllLines(@"C:\Audio Silence Detector\AudioSilenceDetector.txt"); 

당신은 lines 지금 5 elemetns 포함되어 있음을 확신 할 수 없다. 당신은 아마 그것을 확인해야합니다.

if(lines.Length == 5) 
{ 
    tbOpenKey.Text = lines[0]; 
    tbSecretKey.Text = lines[1]; 
    tbStatusRequestPath.Text = lines[2]; 
    tbStatusRequestAPI.Text = lines[3]; 
    tbSeconds.Text = lines[4]; 
} 
else 
{ 
    MessageBox.Show("Input Data is Wrong"); 
} 
+0

감사합니다. 그건 내가 가진 문제를 해결 한 것 같다. –

관련 문제