Я пытаюсь выучить C # и немного застрял в проблеме.Вероятно, очевидно для большинства опытных программистов, но не для меня: (
Я пытаюсь написать класс, который должен иметь 3 перегрузки конструктора:
- Я указываю толькопапка.
- Я указываю папку и тип файла (расширение файла).
- Я указываю папку, тип файла и да / нет для поиска в подпапке.
В зависимости от спецификации пользователя класс возвращает List.
Итак, я написал следующий код:
public class SearchForFiles
{
private readonly List<string> _filePath = new List<string>();
private readonly List<string> _fileType = new List<string>();
private readonly bool _searchSubFolder = false;
private SearchOption _searchOption = SearchOption.TopDirectoryOnly;
private readonly IEnumerable<string> _searchForFiles = null;
/// <summary>
/// Searching all the files in the specified folder.
/// </summary>
/// <param name="searchFolder">Specify folder for file search</param>
public SearchForFiles(string searchFolder)
{
_filePath.Add(searchFolder);
_fileType.Add(".*");
FindFiles(_filePath, _fileType, false);
}
/// <summary>
/// Searching all the files with the specified file extension in the specified folder.
/// </summary>
/// <param name="searchFolder">Specify folder for file search</param>
/// <param name="fileType">Specify extension of the file search</param>
public SearchForFiles(string searchFolder, string fileType)
: this(searchFolder)
{
_fileType.Add(fileType);
FindFiles(_filePath, _fileType, false);
}
public SearchForFiles(List<string> searchFolder, List<string> fileType, bool searchSubFolder)
: this(searchFolder, fileType)
{
_searchSubFolder = searchSubFolder;
FindFiles(_filePath, _fileType, _searchSubFolder);
}
Проблема заключается в третьей перегрузке, я не понимаю, почемусо второй перегрузкой все в порядке, но не с третьей.
Если кто-нибудь может мне помочь, это было бы здорово.
Вот обновленный Код, который работает:
/// <summary>
/// Returning a list of files depending on the user choices.
/// </summary>
public class SearchForFiles
{
private readonly List<string> _filePath = new List<string>();
private readonly List<string> _fileType = new List<string>();
private readonly bool _searchSubFolder = false;
private SearchOption _searchOption = SearchOption.TopDirectoryOnly;
private IEnumerable<string> _searchForFiles = null;
/// <summary>
/// Searching all the files with the specified file extension(s) in the specified folder(s) and sub folder(s) if wanted.
/// </summary>
/// <param name="searchFolder">Specify folder(s) for file(s) search</param>
/// <param name="fileType">Specify file extension(s) for the search</param>
/// <param name="searchSubFolder">Specify if you want to search in sub folder(s)</param>
public SearchForFiles(List<string> searchFolder, List<string> fileType, bool searchSubFolder)
{
_filePath = searchFolder;
_fileType = fileType;
_searchSubFolder = searchSubFolder;
FindFiles();
}
/// <summary>
/// Searching all the files with the specified file extension in the specified folder.
/// </summary>
/// <param name="searchFolder">Specify folder for file search</param>
/// <param name="fileType">Specify file extension for the search</param>
public SearchForFiles(string searchFolder, string fileType)
: this(new List<string>() {searchFolder}, new List<string>() {fileType}, false)
{
}
/// <summary>
/// Searching all the files in the specified folder.
/// </summary>
/// <param name="searchFolder">Specify folder for file search</param>
public SearchForFiles(string searchFolder)
: this(new List<string>() {searchFolder}, new List<string>(), false)
{
}
private List<string> FindFiles()
{
var findFiles = new List<string>();
if (_searchSubFolder == true)
_searchOption = SearchOption.AllDirectories;
foreach (var filePath in _filePath)
{
if (_fileType.Count == 0)
{
_searchForFiles = Directory.EnumerateFiles(filePath, "*.*", _searchOption);
}
else
{
_searchForFiles = Directory.EnumerateFiles(filePath, "*.*", _searchOption).Where(e => _fileType.Contains(new FileInfo(e).Extension, StringComparer.OrdinalIgnoreCase));
}
foreach (var file in _searchForFiles)
{
findFiles.Add(file);
}
}
return findFiles;
}
}
Большое спасибо за все подсказки и ответы:)