Определение, если файл существует с помощью c# и разрешая путь UNC

Swift4

Просто нашел решение для той же самой проблемы, Swift4. Идея в том, что: если нажатая клавиша обрабатывалась пользовательской логикой, обработчик должен возвращать nil, иначе (необработанное) событие ...

class MyViewController: NSViewController {
   override func viewDidLoad() {
      super.viewDidLoad()
      // ...
      NSEvent.addLocalMonitorForEvents(matching: .keyDown) {
         if self.myKeyDown(with: $0) {
            return nil
         } else {
            return $0
         }
      }
   }
   func myKeyDown(with event: NSEvent) -> Bool {
      // handle keyDown only if current window has focus, i.e. is keyWindow
      guard let locWindow = self.view.window,
         NSApplication.shared.keyWindow === locWindow else { return false }
      switch Int( event.keyCode) {
      case kVK_Escape:
         // do what you want to do at "Escape"
         return true
      default: 
         return false
      }
   }
}

И вот мы: no Purr / Funk звук при нажатии клавиши ...

[Обновление] Добавлена ​​проверка keyWindow. Без этого keyDown () запускается, даже если в другом представлении / окне содержится первый ответчик ...

28
задан steve_mtl 19 January 2009 в 17:30
поделиться

5 ответов

Вы можете создать FileInfo для несуществующего файла. Но затем вы можете проверить свойство FileInfo.Exists, чтобы определить, существует ли файл, например:

FileInfo fi = new FileInfo(somePath);
bool exists = fi.Exists;

Обновление : в коротком тесте это также работало для путей UNC, например, например:

FileInfo fi = new FileInfo(@"\\server\share\file.txt");
bool exists = fi.Exists;

Вы уверены, что учетная запись (под которой запущено ваше приложение) имеет доступ к общему ресурсу. Я думаю, что (по умолчанию) административные права требуются для доступа к общему ресурсу "c $".

37
ответ дан M4N 14 October 2019 в 10:46
поделиться

Это может или не может иметь место, но могли Вы присоединиться к Вашему пути имя файла неправильно для одного из Ваших случаев.

Это:

успех = Файл. Существует (путь + шаблон);

по сравнению с:

успех = Файл. Существует (Путь. Соединение (путь, шаблон));

3
ответ дан llamaoo7 14 October 2019 в 10:46
поделиться

Посмотрите этот вопрос:
, как можно легко проверить, запрещен ли доступ для файла в.NET?

короткая версия того вопроса - то, что Вы не делаете, потому что файловая система энергозависима. Просто попытайтесь открыть файл и поймать исключение, если это перестало работать.

причина Ваш isFileFound, метод не работает, состоит в том, потому что FileInfo структура, которую Вы используете, может также использоваться для создания файлов. Можно создать объект FileInfo с желаемой информацией для несуществующего файла, звонить, это .Create() метод, и Вы установили свои желаемые свойства внезапно.

я подозреваю причину, которую приводит к сбою путь UNC, или 1) проблема полномочий, получающая доступ к администраторской доле от пользователя, запускающего Ваше приложение, или 2) $, символ отбрасывает метод, или потому что это не вводится правильно или из-за ошибки в базовом.Exists () реализация.

Обновление:

, Когда я отправляю это предложение, я почти всегда получаю жалобу на выполнение исключения. Давайте говорить об этом. Да, обрабатывание исключений является дорогим: очень дорогой. Существует немного вещей, которые можно сделать в программировании, которые медленнее. Но Вы знаете, какой те немного вещей? Диск и сеть I/O. Вот ссылка, которая демонстрирует, какого количества стоили дисковый ввод-вывод и сеть I/O:

https://gist.github.com/jboner/2841832

Latency Comparison Numbers
--------------------------
L1 cache reference                            0.5 ns
Branch mispredict                             5   ns
L2 cache reference                            7   ns             14x L1 cache
Mutex lock/unlock                            25   ns
Main memory reference                       100   ns             20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy              3,000   ns
Send 1K bytes over 1 Gbps network        10,000   ns    0.01 ms
Read 4K randomly from SSD*              150,000   ns    0.15 ms
Read 1 MB sequentially from memory      250,000   ns    0.25 ms
Round trip within same datacenter       500,000   ns    0.5  ms
Read 1 MB sequentially from SSD*      1,000,000   ns    1    ms  4X memory
Disk seek                            10,000,000   ns   10    ms  20x datacenter roundtrip
Read 1 MB sequentially from disk     20,000,000   ns   20    ms  80x memory, 20X SSD
Send packet CA->Netherlands->CA     150,000,000   ns  150    ms

, Если взгляды в наносекундах не являются Вашей вещью, вот является другой ссылкой, которая нормализует один цикл ЦП как 1 секунду и масштабируется оттуда:

http://blog.codinghorror.com/the-infinite-space-between-words/

1 CPU cycle             0.3 ns      1 s
Level 1 cache access    0.9 ns      3 s
Level 2 cache access    2.8 ns      9 s
Level 3 cache access    12.9 ns     43 s
Main memory access      120 ns      6 min
Solid-state disk I/O    50-150 μs   2-6 days
Rotational disk I/O     1-10 ms     1-12 months
Internet: SF to NYC     40 ms       4 years
Internet: SF to UK      81 ms       8 years
Internet: SF to AUS     183 ms      19 years
OS virt. reboot         4 s         423 years
SCSI command time-out   30 s        3000 years
Hardware virt. reboot   40 s        4000 years
Physical system reboot  5 m         32 millenia

Взятие даже лучший вариант развития событий для исключений, можно получить доступ к памяти по крайней мере 480 раз при ожидании на первом ответе от диска, и это принимает очень быстрый SSD. Многим из нас все еще нужны вращающиеся жесткие диски, где вещи становятся очень, намного хуже.

И это - только начало истории. Когда Вы используете .Exists(), Вы подвергаетесь этому дополнительный стоимость (и это - дополнение: необходимо сделать ту же работу снова, когда Вы идете для открытия файла) на [1 116] каждый попытка. Вы платите, это стоит, существует ли файл или нет, потому что диск все еще должен искать его в, он - таблицы файлов. С методом исключения Вы только оплачиваете дополнительные расходы раскручивания стека вызовов в случае отказа.

, Другими словами, да: исключения являются ужасно дорогостоящими. Но по сравнению с дисковой проверкой, это еще быстрее: а не просто маленьким полем. К счастью это вряд ли определит общую эффективность Вашего приложения..., но я все еще хочу отправить "исключения спать, медленный" аргумент в пользу этой определенной задачи.

13
ответ дан Community 14 October 2019 в 10:46
поделиться

Это может помочь Вам:
http://www.codeplex.com/FileDirectoryPath
Это NDepend. Помощники. FilePathDirectory, которые имеют "API проверки достоверности пути" среди другого, который может быть полезным.

1
ответ дан Click Ok 14 October 2019 в 10:46
поделиться

Итак, я выбрал опцию

bool success = File.Exists(path + Filename);

, а не по маршруту FileInfo.

Спасибо за все предложения!

1
ответ дан steve_mtl 14 October 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: