Надеюсь, здесь кто-то может мне помочь, я не очень знаком с работой с каталогами. Мое приложение сжимает файлы и сохраняет их в каталоге мультимедиа, а также сохраняет их в базе данных. Это хорошо работает, если я создаю каталог и фактически вызываю каждый файл отдельно.
Но я хотел бы сделать его динамическим и обрабатывать все папки в папке установки. Для каждого каталога в этом каталоге я хотел бы обрабатывать каждый каталог и все файлы в этом каталоге.
Что я пробовал:
public class SetupFiles : ISetupFiles
{
private readonly ISession _session;
private readonly IFileService _fileService;
private readonly IFileProvider _fileProvider;
public SetupFiles(ISession session, IFileService fileService, IFileProvider fileProvider)
{
_session = session;
_fileService = fileService;
_fileProvider = fileProvider;
}
public void Setup()
{
string installPath = ("install/images/");
_session.Transact(session =>
{
DirectoryInfo dir = new DirectoryInfo(installPath);
DirectoryInfo[] subdirectories = dir.GetDirectories();
foreach (var subdirectory in subdirectories)
{
string currentDirName = Directory.GetCurrentDirectory();
var directory = new MediaCategory
{
Name = subdirectory.Name.ToString().ToUpper(),
UrlSegment = subdirectory.Name.Trim().ToLower(),
};
session.Save(directory);
string[] pngFiles = Directory.GetFiles(currentDirName, "*.png", SearchOption.AllDirectories);
string[] jpgFiles = Directory.GetFiles(currentDirName, "*.jpg", SearchOption.AllDirectories);
string[] gifFiles = Directory.GetFiles(currentDirName, "*.gif", SearchOption.AllDirectories);
string[] pdfFiles = Directory.GetFiles(currentDirName, "*.pdf", SearchOption.AllDirectories);
foreach (var currentPngFile in pngFiles)
{
var fileStream = _fileProvider.GetFileInfo(currentPngFile).CreateReadStream();
MediaFile dbpngFile = _fileService.AddFile(fileStream, Path.GetFileName(currentPngFile), "image/png", fileStream.Length, directory);
}
foreach (var currentJpgFile in jpgFiles)
{
var fileStream = _fileProvider.GetFileInfo(currentJpgFile).CreateReadStream();
MediaFile dbjpgFile = _fileService.AddFile(fileStream, Path.GetFileName(currentJpgFile), "image/jpg", fileStream.Length, directory);
}
foreach (var currentGifFile in gifFiles)
{
var fileStream = _fileProvider.GetFileInfo(currentGifFile).CreateReadStream();
MediaFile dbgifFile = _fileService.AddFile(fileStream, Path.GetFileName(currentGifFile), "image/gif", fileStream.Length, directory);
}
foreach (var currentPdfFile in pdfFiles)
{
var fileStream = _fileProvider.GetFileInfo(currentPdfFile).CreateReadStream();
MediaFile dbgifFile = _fileService.AddFile(fileStream, Path.GetFileName(currentPdfFile), "file/pdf", fileStream.Length, directory);
}
}
});
}
Но по какой-то причине я получаю ошибку, что не могу найти каталог.
Любая помощь будет принята с благодарностью.
в строке DirectoryInfo[] subdirectories = dir.GetDirectories();
dir показывает каталог, но GetDirectories()
возвращает NULL.