2016-04-15 28 views
0

我的代碼不會更改文件中的任何內容。 這是我的代碼。 我嘗試通過idx的行來找到用戶的名字,並且改變了所需的改變,但是txt文件保持原樣,方法是「讀取名稱」,通過拆分及其作品讀取所有人的姓名。 讀取文件方法將所有行讀取到行數組。 update arr是獲取新行數組並將其替換爲第一個數組的方法。 findidxbyusename發現所選擇的用戶名簡單用戶在c#中通過文本文件作爲數據庫編輯面板管理員

public string[] readNames() 
{ 
    string[] lines = System.IO.File.ReadAllLines(@"c:/aab/passwords.txt"); 
    string tmpName; 
    string[] arr = new string[lines.Length]; 
    for (int i = 0; i < lines.Length; i++) 
    { 
     tmpName = lines[i].Split(new[] { ",", " " }, StringSplitOptions.RemoveEmptyEntries)[0]; 
     arr[i] = tmpName; 
    } 
    return arr; 
} 
public string[] readFile() 
{ 
    string[] lines = System.IO.File.ReadAllLines(@"c:/aab/passwords.txt"); 
    return lines; 
} 

public void updateArr(string[] arr) 
{ 
    string content = ""; 
    for (int i = 0; i < arr.Length; i++) 
    { 
     content += arr[i] + "\r\n"; 
    } 
    File.WriteAllText("c:/aab/passwords.txt", content); 
} 


public int FindidxOfUser(string username) 
{ 
    string[] arr = readFile(); 
    int idx = 0; 
    for (int i = 0; i < arr.Length; i++) 
    { 
     if (arr[i].Split(new[] { ",", " " }, StringSplitOptions.RemoveEmptyEntries)[0].Equals(username)) 
     { 
      idx = i; 
     } 
    } 
    return idx; 
} 

private void usersEdit_Load(object sender, EventArgs e) 
{ 
    string[] arr = readNames(); 
    for (int i = 0; i < arr.Length; i++) 
    { 
     comboBox2.Items.Add(arr[i]); 
    } 
} 

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (comboBox1.Text.Equals("User name")) 
    { 
     label2.Text = "New User Name :"; 
     textBox1.Visible = true; 
    } 
    else 
    { 
     label2.Text = "New Password :"; 
     textBox1.Visible = true; 
    } 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    string username = comboBox2.Text; 
    int idx = FindidxOfUser(username); 
    string[] arr = readFile(); 
    if (comboBox1.Text.Equals("User name")) 
    { 
     arr[idx].Split(',')[0] = textBox1.Text; 
     updateArr(arr); 
     MessageBox.Show(comboBox1.Text + " Changed Succesfully!", "Succes!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
     this.Hide(); 
    } 
    else if (comboBox2.Text.Equals("Password")) 
    { 
     arr[idx].Split(',')[1] = textBox1.Text; 
     updateArr(arr); 
     MessageBox.Show(comboBox1.Text + " Changed Succesfully!", "Succes!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
     this.Hide(); 
    } 
    else 
    { 
     MessageBox.Show("Shlomi you are a dom ass", "Succes!", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
     this.Hide(); 
    } 
} 
+0

你的問題是什麼? – KornMuffin

+0

我的問題是爲什麼它不工作 –

回答

0

你實際上並沒有分配值的ARR [IDX]字符串用下面的代碼的行IDX:

arr[idx].Split(',')[0] = textBox1.Text 

它實際上是分裂創建字符串數組的字符串,然後將第一個值設置爲文本框文本。你實際上並沒有給arr [idx]字符串賦值,而是給出了字符串的內存數組。這是一個微妙的差異,但是你的代碼不工作的原因。

您可以將行更改爲以下,使其「大棒」:

string[] arrElements = arr[idx].Split(','); 
arrElements[0] = textBox1.Text; 
arr[idx] = String.Join(arrElements, ","); 
updateArr(arr); 

你會那麼就需要做同樣的,你要設置的密碼。關鍵在於你正在以這種方式將值分配給實際的arr [idx],而不是來自分割的臨時字符串數組。

+0

但string.join需要在第一個參數字符串中不是數組 –

+0

這是不行的它刪除所有行 –

相關問題