using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace FunkcjaSpilit
{
class Program2
{
static int _MinWordLength = 7;
static void Main()
{
DirectoryInfo filePaths = new DirectoryInfo(@"D:project_IAD");
FileInfo[] Files = filePaths.GetFiles("*.sgm");
List<string> firstone = new List<string>();
foreach (FileInfo file in Files)
{
int longWordsCount = CalculateLongWordsCount(file, _MinWordLength);
Console.WriteLine("W tekscie numer: " + firstone.IndexOf(file) + " liczba długich słów to " + longWordsCount);
}
Console.ReadLine();
}
private static int CalculateLongWordsCount(FileInfo file, int minWordLength)
{
return file.Split(' ').Where(wordInText => wordInText.Length >= minWordLength).Count();
}
}
}
运行此代码后,将出现错误:(本地变量(FileInfo文件CS 1503:参数1:无法从系统转换。IO.FileInfo到"string">如何修复?
我在代码中看到了两个问题。这两者都源于不了解FileInfo
结构的用途。我会修正其中一个错误,让你从我的修正中学习,自己做第二个错误。
private static int CalculateLongWordsCount(FileInfo file, int minWordLength)
{
return File.ReadLines(file.FullName).
Select(line => line.Split(' ').Count(word => word.Length > minWordLength)).
Sum();
}
你也可以使用File.ReadAllText()
,它会更简单,更像原始代码,但我更喜欢ReadLines()
,因为它至少可以提供一些保护,防止大文件破坏你的内存。
另一个问题是这个表达式:
firstone.IndexOf(file)
但是,我还是把这个问题留给您来解决,这样您就一定能理解如何使用FileInfo
结构。与FileInfo
问题不同,此表达式也将始终返回-1
,因为从未向firstone
列表中添加任何数据。