[英]C# Write from text file to listView
我用C#創建了Windows應用程序,該應用程序從文本文件寫入listView。 我首先在cmd中執行命令以列出手機中的系統和用戶應用程序,然后將cmd輸出放入文本文件。 現在,我想將文本文件的內容添加到listView中:應該列出第一列中的/ system / app中的應用程序,第二列中的/ system / priv-app中的應用程序以及第三遍/ data / app的應用程序! 當我按下按鈕執行功能時,出現錯誤:System.ArgumentException:無法在多個地方添加或插入項目“。 您必須首先將其從其當前位置刪除或克隆它。
Process process;
ProcessStartInfo startInfo;
private void Form1_Load(object sender, EventArgs e)
{
process = new Process();
startInfo = new ProcessStartInfo();
startInfo.FileName = "cmd.exe";
startInfo.ErrorDialog = false;
startInfo.UseShellExecute = false;
startInfo.RedirectStandardError = true;
startInfo.RedirectStandardInput = true;
startInfo.RedirectStandardOutput = true;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.Arguments = "/C adb devices&adb shell pm list packages -f";
}
private void Redirect_ADB_Output()
{
using (Process process = Process.Start(startInfo))
{
using (StreamReader reader = process.StandardOutput)
{
string result = reader.ReadToEnd();
File.WriteAllText("ADB.txt", result);
}
}
}
private void WriteToListView()
{
ListViewItem lvItem = new ListViewItem();
var lines = File.ReadLines("ADB.txt");
foreach (var line in lines)
{
ListViewItem lvItem = new ListViewItem();
if (line != string.Empty)
{
var newLine = line.Remove(0, 8);
if (line.Contains("package:/system/app"))
{
ApkList.Items.Add(newLine);
}
if (line.Contains("package:/system/priv-app"))
{
lvItem.SubItems.Add(newLine);
}
if (line.Contains("package:/data/app"))
{
lvItem.SubItems.Add(newLine);
}
}
ApkList.Items.Add(lvItem);
}
File.WriteAllText("ADB.txt", string.Empty);
}
private void btn_PullApkFromPhone_Click(object sender, EventArgs e)
{
startInfo.Arguments = "/C adb devices&adb shell pm list packages -f";
Redirect_ADB_Output();
WriteToListView();
}
我認為這可能是因為您在循環訪問元素時正在對其進行修改。
嘗試創建一個新對象並將其添加到集合中(也正如另一個用戶指出的那樣,嘗試將ListView移到foreach循環中):
foreach (var line in lines)
{
ListViewItem lvItem = new ListViewItem();
var newLine = line.Remove(0, 8);
if (line.StartsWith("package:/system/app"))
{
ApkList.Items.Add(newLine);
}
if (line.StartsWith("package:/system/priv-app"))
{
lvItem.SubItems.Add(newLine);
}
if (line.StartsWith("package:/data/app"))
{
lvItem.SubItems.Add(newLine);
}
ApkList.Items.Add(lvItem);
}
我建議先添加“列”,這會有所幫助。
ListViewItem lvItem = new ListViewItem();
ApkList.View = View.Details;
ApkList.Columns.Add("Col1");
ApkList.Columns.Add("Col2");
ApkList.Columns.Add("Col3");
然后,您需要在foreach上執行此操作。
foreach (var line in lines)
{
if (line != string.Empty)
{
var newLine = line.Remove(0, 8);
if (line.Contains("package:/system/app"))
{
lvItem.Text = newLine;
}
if (line.Contains("package:/system/priv-app"))
{
lvItem.SubItems.Add(newLine);
}
if (line.Contains("package:/data/app"))
{
lvItem.SubItems.Add(newLine);
}
}
}
ApkList.Items.Add(lvItem);
然后,您需要圍繞上面的最后一個循環,foreach,同時填充整個列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.