C# FileInfo.Length Свойство для файла .txt против файла .csv - PullRequest
0 голосов
/ 01 апреля 2020

Я новичок в C# и новичок в Visual Studio. Я на полпути к 16-недельному занятию в C# с использованием Visual Studio. Я чувствовал, что, возможно, научился достаточно, чтобы понять этот кусок кода с работы и изменить его. До сих пор я был в состоянии понять большую часть этого (после многих часов, и с помощью Google много). Однако есть несколько мест, которые меня озадачили ... Или, может быть, оригинальный программист не использовал очень хорошую логику c? Я не знаю ... См. Код ниже:

    //This is just a piece of the code... there are hundreds of lines of code above this
    private static void OnSizeChange(object source, FileSystemEventArgs e)
    {
        try
        {
            // SET PATHS FROM WATCHER
            String filePath = e.FullPath;

            FileInfo infoForPath = new FileInfo(e.FullPath);
            //CHECK FOR TEXT FILE IN ORDER TO VERIFY SIZE TO CONFIRM NEW EMPTY FILE WAS NOT CREATED
            String txtExt = ".txt";
            Boolean isTxt = e.FullPath.Contains(txtExt);
            //Length gets the size, in bytes, of the current file.
            if (!isTxt && infoForPath.Length > 5 || isTxt && infoForPath.Length > 0)

Что вы не можете увидеть здесь, так это то, что файл будет либо в формате .txt, либо в формате .csv. У меня вопрос по поводу оператора if.

Что такое проверка оператора if?

Из того, что я могу собрать, он проверяет, есть ли ".txt" в пути к файлу && длина файла в байтах равна "> 5" (для файла без .txt) или "> 0" (для файла .txt).

В чем причина "5" и "0"?

Есть ли какая-то внутренняя причина для этих чисел, относящихся к файлам .txt и .csv?

Если это поможет, я нашел этот код в Интернете, который похож и может использовать для тестирования, я думаю, из C# приложения командной строки.

using System;
using System.IO;

class Program
{
    static void Main()
    {
        const string fileName = @"C:\programs\file.txt";

        // Part 1: create new FileInfo get Length.
        FileInfo info = new FileInfo(fileName);
        long length = info.Length;

        // Part 2: print length in bytes.
        Console.WriteLine("LENGTH IN BYTES: {0}", length);
    }
}

Output

LENGTH IN BYTES: 60

1 Ответ

1 голос
/ 01 апреля 2020

Для начала Boolean isTxt = e.FullPath.Contains(txtExt); подвержен ошибкам и не лучший способ сделать это.

Вместо этого вы должны получить расширение, выполнив var fileExtenstion = infoForPath.Extension, и вы получите расширение файла. Для получения дополнительной информации об этом смотрите здесь . Теперь, когда у вас есть расширение, вы можете проверить, является ли расширение .txt, и вернуть bool или изменить способ работы оператора if.

Причина проверки длины 0 для текстовых файлов заключается в том, что текст файлы не содержат данных (длины), когда они пусты. Я не знаю наверняка, но CSV-файлы могут иметь длину по умолчанию 5. Вы можете использовать код консольного приложения, который вы разместили, если хотите проверить это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...