我有一个程序,它正在写一个保存文件。它目前通过检查列表框并简单地将其内容写入文本文件来完成此任务。
我想要的是,如果文本文件在文本文件中检测到2个相同的字符串,它将删除其中一个。
imports:
- { resource: config.yml }
framework:
router:
resource: "%kernel.root_dir%/config/routing_dev.yml"
strict_requirements: true
profiler: { only_exceptions: false }
web_profiler:
toolbar: true
intercept_redirects: false
monolog:
handlers:
main:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"
level: debug
firephp:
type: firephp
level: info
chromephp:
type: chromephp
level: info
assetic:
use_controller: true
让我们说在textfile中包含这个:
path = @"C:\thing.txt";
if (!File.Exists(path))
{
FileStream fs = File.Create(path);
fs.Close();
}
if (checkedListBox1.Items.Count > 0)
{
using (TextWriter tw = File.AppendText(path))
{
foreach (string fileName in fullFileName)
{
foreach (string item in checkedListBox1.Items)
tw.WriteLine(fileName); //writes file path to textfile
}
}
}
else
{
//nothing to do! There is nothing to save!
}
我不希望文本文件有
C:\Jack.exe
C:\COolstuff.exe
相反,我希望它删除第三行:C:\ Jack.exe,因为它匹配第一行。
答案 0 :(得分:3)
如果没有看到代码的其余部分,我相信您可以使用LINQ的Distinct()来快速完成此任务。
foreach (string fileName in fullFileName.Distinct())
这将导致foreach
仅返回唯一字符串。请记住,您可能需要添加对LINQ命名空间的引用。如果你在Distinct()上收到错误,请将光标放在它上面并使用ctrl+,
让VS为你建议。
答案 1 :(得分:0)
如果要删除文本文件中的重复项,可以执行的操作是读取数组中的所有行而不是将其更改为List,这样您就可以使用Distinct()
然后使用新文件重写为文本文件像这样的列表:
string[] lines = File.ReadAllLines(filePath);
List<string> list = lines.ToList();
list = list.Distinct().ToList();
File.WriteAllLines(filePath, list.ToArray());
有关Distinct的更多信息。
答案 2 :(得分:0)
如果我理解正确,因为您只想保存唯一值,那么最好先读取保存的值,以便将它们与新值进行比较。
代码流看起来像:
在实践中,这可能如下所示:
string saveFilePath = @"c:\data\savedFiles.txt";
List<string> savedFileNames = new List<string>();
List<string> newFileNames = new List<string>();
// If our save file exists, read all contents into the 'saved file' list
if (File.Exists(saveFilePath))
{
savedFileNames.AddRange(File.ReadAllLines(saveFilePath));
}
// For each item in our check box, add it to our 'new
// file' list if it doesn't exist in the 'saved file' list
foreach (var checkedItemin CheckedListBox1.CheckedItems)
{
if (!savedFileNames.Contains(checkedItem))
{
newFileNames.Add(checkedItem.ToString());
}
}
// Append our new file names to the end of the saved file (this
// will also create the file for us if it doesn't already exist)
File.AppendAllLines(saveFilePath, newFileNames);