Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# удаление файлов в папке кроме одного / 12 сообщений из 12, страница 1 из 1
15.03.2016, 10:22
    #39191950
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Здравствуйте.

Подскажите пожалуйста почему файл не исключается из запроса.
Код: c#
1.
var deleteFiles = dir.GetFiles().Where(w => w != new FileInfo(Path.Combine("C:\\Books\", "book.doc"))).ToList();



Файл в данной директории присутствует, но почему-то в запросе он выбирается, а мне нужно его исключить.
...
Рейтинг: 0 / 0
15.03.2016, 10:31
    #39191956
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
А так?
Код: c#
1.
var deleteFiles = dir.GetFiles().Where(w => w != Path.Combine("C:\\Books\", "book.doc")).ToList();
...
Рейтинг: 0 / 0
15.03.2016, 10:36
    #39191961
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Dima TА так?
Код: c#
1.
var deleteFiles = dir.GetFiles().Where(w => w != Path.Combine("C:\\Books\", "book.doc")).ToList();



Результат тот же.
...
Рейтинг: 0 / 0
15.03.2016, 10:43
    #39191969
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Если посмотреть в режиме debug, то картина следующая.

Код: c#
1.
2.
3.
4.
5.
6.
7.
var dd = new FileInfo(Path.Combine("C:\\Books\", "book.doc"))
// В режиме debug, если раскрыть плюс, то пишет полное путь
//base {System.IO.FileStreamInfo} {C:\\Books\book.doc}

var dd = dir.GetFiles().FirstOfDefault();
// В режиме debug, если раскрыть плюс, пишет только имя файла.
//base {System.IO.FileStreamInfo} {book.doc}
...
Рейтинг: 0 / 0
15.03.2016, 10:46
    #39191976
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Надо по феньшую!
Код: c#
1.
2.
3.
4.
  var df = Directory.GetFiles(@"C:\Books")
                .Select(x => Path.GetFileName(x))
                .Where(x => string.Compare("book.doc", x, StringComparison.InvariantCultureIgnoreCase) == 0)
                .ToList();
...
Рейтинг: 0 / 0
15.03.2016, 10:47
    #39191977
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Блин, не равно.
Код: c#
1.
2.
3.
4.
      var df = Directory.GetFiles(@"C:\Books")
                .Select(x => Path.GetFileName(x))
                .Where(x => string.Compare("book.doc", x, StringComparison.InvariantCultureIgnoreCase) != 0)
                .ToList();
...
Рейтинг: 0 / 0
15.03.2016, 10:51
    #39191984
zz118
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Проблема в том, что в FileInfo не определен Equals, соответственно наботает дефолтное ReferenceEquals(). Я бы советовал брать Path.GetFullPath() и сравнивать с Path.GetFullPath от FileInfo.DirectoryName и FileInfo.Name. Внутри FileInfo все равно идет обратная склейка:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
        [System.Security.SecurityCritical]
        [ResourceExposure(ResourceScope.Machine)]
        [ResourceConsumption(ResourceScope.Machine)]
        private void Init(String fileName, bool checkHost)
        {
            OriginalPath = fileName;
            // Must fully qualify the path for the security check
            String fullPath = Path.GetFullPathInternal(fileName);
#if FEATURE_CORECLR
            if (checkHost)
            {
                FileSecurityState state = new FileSecurityState(FileSecurityStateAccess.Read, fileName, fullPath);
                state.EnsureState();
            }
#else
            FileIOPermission.QuickDemand(FileIOPermissionAccess.Read, fullPath, false, false);
#endif

            _name = Path.GetFileName(fileName);
            FullPath = fullPath;
            DisplayPath = GetDisplayPath(fileName);
        }
...
Рейтинг: 0 / 0
15.03.2016, 10:52
    #39191987
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Так работает
Код: c#
1.
var deleteFiles = dir.GetFiles().Where(w => w.Name != "book.doc").ToList();


Только учти что "book.doc" != "Book.doc"
...
Рейтинг: 0 / 0
15.03.2016, 10:56
    #39191991
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
ЕвгенийВБлин, не равно.
Код: c#
1.
2.
3.
4.
      var df = Directory.GetFiles(@"C:\Books")
                .Select(x => Path.GetFileName(x))
                .Where(x => string.Compare("book.doc", x, StringComparison.InvariantCultureIgnoreCase) != 0)
                .ToList();


По феньшую работает! Спасибо.
...
Рейтинг: 0 / 0
15.03.2016, 11:04
    #39192002
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
zz118Проблема в том, что в FileInfo не определен Equals, соответственно наботает дефолтное ReferenceEquals().
Другая проблема в том, что GetFiles возвращает массив строк :)
...
Рейтинг: 0 / 0
15.03.2016, 11:18
    #39192021
Nechto
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
ЕвгенийВzz118Проблема в том, что в FileInfo не определен Equals, соответственно наботает дефолтное ReferenceEquals().
Другая проблема в том, что GetFiles возвращает массив строк :)

Это не проблема :)
...
Рейтинг: 0 / 0
15.03.2016, 11:34
    #39192045
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
c# удаление файлов в папке кроме одного
Nechto
Это не проблема :)
Это был сарказм, в первом посте мы сравниваешь строку с FileInfo
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / c# удаление файлов в папке кроме одного / 12 сообщений из 12, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]