#c# #.net-core #ubuntu-20.04 #system.io.directory #system.io.fileinfo
#c# #.net-ядро #ubuntu-20.04 #system.io.directory #system.io.fileinfo
Вопрос:
Я смотрю на систему.Ввод-вывод и написал небольшой метод для подсчета количества файлов в каталоге. Проблема, с которой я сталкиваюсь, заключается в том, что когда я отлаживаю этот фрагмент кода в Windows, я могу перечислять по коллекции при наведении курсора мыши на коллекцию. Итак, вот код и изображение в Visual Studio в Windows.
Вот код, о котором идет речь:
static void Main(string[] args)
{
var dir = new DirectoryInfo(@"/home/user1/Downloads/Folder that
has spaces in name");
var files = dir.EnumerateFiles();
var count = files.Count();
Console.WriteLine($"Number of files in Videos Folder is {count}");
}
Это то, что я получаю, когда запускаю те же строки кода в ubuntu:
Кто-нибудь может помочь мне понять, что здесь происходит? В обеих папках есть файлы, и разрешения не являются проблемой, поскольку я работаю с папкой в моем домашнем каталоге ( home user Downloads Videos). Имена папок не являются проблемой, как я уже проверил.
Комментарии:
1. Windows использует обратную косую черту () для указания пути к файлу, тогда как Linux использует прямую косую черту (/). Я думаю, что это, вероятно, причина.
2. Извините, я допустил ошибку с путем. Сейчас это исправим. Это также не причина. Проверил это и потратил кучу времени на чтение о разделителе каталогов. Извините за ошибку
3. DirectoryInfo завершится ошибкой, если у вас нет разрешения на чтение любого файла в папке. Попробуйте выполнить foreach (var d в каталоге), а затем добавьте обработчик исключений try / catch, чтобы не выходить из цикла for.
4. и что
ls /home/user1/Downloads/Videos
показывает?5. @jdweng уже проверил проблему с разрешениями перед публикацией этого, разрешения не являются проблемой. файлы находятся в папке моего профиля, так что у меня здесь есть полные права доступа.