我试图找出文本文件是否包含string
。 string
可以是列表string
中包含的textwords
中的任何一个,如果文本文件中包含单词,则会将文件复制到新位置
我遇到的问题是程序没有遍历textwords
中的所有单词,它只接受列表的第一个值。如何让它循环遍历列表中的所有字符串,并在复制文件之前查看它们是否包含在文本文件中。
任何帮助都将不胜感激。
我的代码如下,
foreach (FileInfo file in files)
{
//reads the file contents
bool nextouterloop = false;
using (StreamReader ReadMessage = new StreamReader(file.FullName))
{
String MessageContents = ReadMessage.ReadToEnd();
//checks if the textwords are present in the file
foreach ( string Keyword in textwords )
{
//if they are file is moved to quarantine messages
if ( MessageContents.Contains(Keyword) )
{
try
{
File.Copy(file.FullName,
@"F:\UNI\Year 2\Tri 2\Software Engineering Methods\Coursework\Noogle system\Quarantin_Messages\" +
file);
}
catch ( IOException cannot_Move_File )
{
MessageBox.Show(cannot_Move_File.ToString());
}
break;
}
//else it is moved To valid messages
else
{
try
{
File.Copy(file.FullName,
@"F:\UNI\Year 2\Tri 2\Software Engineering Methods\Coursework\Noogle system\Valid_Messages\" +
file);
}
catch ( IOException cannot_Move_File )
{
MessageBox.Show(cannot_Move_File.ToString());
}
break;
}
}
}
}
答案 0 :(得分:1)
你已经打破了'在' if'中的陈述和'其他'条件。因此它永远不会超越第一个字符串。
答案 1 :(得分:1)
但是你在第一遍中执行复制和中断 不开玩笑没有得到第二个字
foreach (FileInfo file in files)
{
string path = @"F:\UNI\Year 2\Tri 2\Software Engineering Methods\Coursework\Noogle system\Valid_Messages\";
//reads the file contents
using (StreamReader ReadMessage = new StreamReader(file.FullName))
{
String MessageContents = ReadMessage.ReadToEnd();
//checks if the textwords are present in the file
foreach (string Keyword in textwords)
{
if (MessageContents.Contains(Keyword))
{
path = @"F:\UNI\Year 2\Tri 2\Software Engineering Methods\Coursework\Noogle system\Quarantin_Messages\"
break;
}
}
}
// let the StreamReader close down before the copy
// don't need it anymore
try
{
File.Copy(file.FullName, path + file);
}
catch (IOException cannot_Move_File)
{
MessageBox.Show(cannot_Move_File.ToString());
}
}
答案 2 :(得分:0)
您在语句结尾处使用break
。这将打破循环。您应该使用continue
代替。
但是这个continue
将毫无用处,因为你只使用if-else函数来复制文件而已。在这种情况下,你可以摆脱break
。程序将执行if语句,并在块结束时忽略else语句(反之亦然)并迭代循环。
答案 3 :(得分:0)
你有"休息"导致它在第一次迭代后停止。像这样的搜索也不会起作用。一个更好(但不完美)的是:
foreach (FileInfo file in files)
{
//reads the file contents
var content = File.ReadAllText(file.FullName);
if (textwords.Any(tw => Regex.IsMatch(content, @"\b" + tw.Trim() + @"\b", RegexOptions.IgnoreCase))
{
try
{
File.Move(file.FullName, Path.Combine(@"F:\UNI\Year 2\Tri 2\Software Engineering Methods\Coursework\Noogle system\Quarantin_Messages", file.Name));
}
catch (IOException cannot_Move_File)
{
MessageBox.Show(cannot_Move_File.ToString());
}
}
else
{
//else it is moved To valid messages
try
{
File.Copy(file.FullName, @"F:\UNI\Year 2\Tri 2\Software Engineering Methods\Coursework\Noogle system\Valid_Messages\" + file.Name);
}
catch (IOException cannot_Move_File)
{
MessageBox.Show(cannot_Move_File.ToString());
}
}
}