BillWoodruff
Исходя из того, что вы говорите, Я думаю, что проблема заключается в следующем: у вас плохой путь к файлу. Гораздо менее вероятная проблема заключается в том, что вы пытаетесь прочитать файл без ... или очень странный, или перепутанный ... символ(ы) разделителя строк.
Примечание: Я не рассматриваю вопрос об обнаружении того, заблокирован ли файл или вам отказано в доступе к файлу по его настройкам разрешений: я предполагаю, что ошибки времени выполнения, вызванные этими аспектами, будут очевидны для вас.
Попробовать это:
public static string[] validextensions = new[] {".txt",".cs", ".csv"};
public static int CountLines(string filepath)
{
string extension = Path.GetExtension(filepath);
if(! validextensions.Contains(extension)) throw new InvalidDataException($"File extension {extension} is not valid");
if (File.Exists(filepath))
{
try
{
return File.ReadLines(filepath).Count();
}
catch (Exception e)
{
Console.WriteLine($"Error reading file {filepath} : {e.Message}");
}
}
else
{
Console.WriteLine($"{filepath} : does not exist");
}
return -1;
}
Но вы должны подумать, действительно ли вы хотите вызвать чтение всего файла только для подсчета строк: 'ReadLines возвращает IEnumerable<string> : 'Count() будет перечислять его. Предполагая, что вы планируете использовать текст (строки) в файле, это имеет больше смысла:
public static string[] validextensions = new[] {".txt",".cs", ".csv"};
public static int CountLines(string filepath, out string[] lines)
{
string extension = Path.GetExtension(filepath);
if(! validextensions.Contains(extension)) throw new InvalidDataException($"File extension {extension} is not valid");
lines = null;
if (File.Exists(filepath))
{
try
{
lines = File.ReadLines(filepath).ToArray();
return lines.Length;
}
catch (Exception e)
{
Console.WriteLine($"Error reading file {filepath} : {e.Message}");
}
}
else
{
Console.WriteLine($"{filepath} : does not exist");
}
return -1;
}
Используйте пример: ... в каком-то методе или EventHandler
string[] readlines;
var nlines = CountLines(@"C:\Users\User\Desktop\Folder\file name.txt", out readlines);
Существует множество методов, доступных для чтения файлов: отличная статья, сравнивающая их, - это: [
^].
Имейте в виду, что в то время как 'ReadLines является надежным ... может иметь дело со многими типами окончаний строк ... есть много возможностей:
Цитата:
Имейте в виду, что для файлов unicode существует ряд различных символов, которые считаются законными Терминаторами строк. Они включают в себя: символ возврата каретки (U+000D), символ перевода строки (U+000A), символ возврата каретки (U+000D), за которым следует символ перевода строки (U+000A), символ разделителя строк (U+2028) и символ разделителя абзацев (U+2029). Иногда также существует символ "конец текста" (U+0003), который по закону может использоваться в качестве Терминатора последней строки файла. – LBushkin Дж
[
^]