Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2019, 09:11   #1
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию Как проверить существование сетевого файла?

Добрый день.
Какой есть аналог File.Exists, чтобы учесть ситуацию, когда нет доступа к удалённому компьютеру (например, удалённый компьютер выключен)?
И чтобы я в своей программе мог сообщить юзеру: нет доступа к удалённому компьютеру. А не писать: файл не существует.

Например, есть api-функция FindFirstFile. Если нет доступа к удалённому компьютеру, то будет создаваться ошибка, по номеру которой можно понять: или файла нет, или нет доступа к удалённому компьютеру.
В C# есть готовые инструменты для этой задачи?
Korshi вне форума Ответить с цитированием
Старый 19.06.2019, 09:42   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Вы постоянно ждёте какого-то чуда.

с этой темой "С помощью какой api-функции можно узнать, открыт доступ к сетевой папке или нет?" уже разобрались?

Вы не можете получить от функций работы с ФС (FileExists, FindFirstFile и т.п.) сведений о том, включён или нет компьютер.
Даже если не брать во внимание, что компьютер включён, а сетевой кабель вытащен. Или ОС на компьютере не загрузилась. Или всё загрузилось, но сдох роутер. или админ вывел компьютер из состава ЛВС. И т.д. и т.п.

Более того, и компьютер может быть включён, и файл существовать.
А доступа к нему у данного пользователя нет (нет доступа к сетевой папке).
Функция FileExists вернёт false == для конечного пользователя это означает, что такого файла нет.

Чисто гипотетически, можно проверять наличие компьютера в локальной сети.
Но для этого нужно знать IP или имя компьютера в ЛВС (эта информация может быть у Вас в виде пути к вашему файлу \\ip\... или \\PCName\...
но это сложно и не очень надёжно.

ну и последнее.
есть ли большая разница пользователю, почему нет файла - мыши перегрызли кабель, компьютер выключен, файл переименовали или удалили, или нет прав доступа?
Работать он с удалённым файлом всё равно не сможет, верно?
О чём ему и сообщит функция FileExists (или аналогичная).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2019, 10:06   #3
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

То есть в C# нет готовых инструментов для этого? Аналога File.Exists не существует?

Так то да, если с файлом надо что-то сделать и нет доступа к нему, то да, не имеет значение, по какой причине его нет.

Но если задача состоит в том, чтобы узнать, есть доступ по локальной сети к файлу или нет? Такая ведь задача может быть? Не просто узнать: существует файл или нет, а именно акцент, узнать есть ли доступ по локальной сети к файлу?

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Чисто гипотетически, можно проверять наличие компьютера в локальной сети.
Но для этого нужно знать IP или имя компьютера в ЛВС
С помощью api-функции FindFirstFile можно это узнать, не зная IP или ещё что-то: просто указывается полное имя файла и функция FindFirstFile сообщит информацию о файле в виде ошибки.

Последний раз редактировалось Korshi; 19.06.2019 в 10:11.
Korshi вне форума Ответить с цитированием
Старый 19.06.2019, 10:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Korshi Посмотреть сообщение
Аналога File.Exists не существует?
как не существует? Вы гуглить пробовали?
первая же ссылка на оф.сайт
https://docs.microsoft.com/en-us/dot...tframework-4.8
Код:
string curFile = @"c:\temp\test.txt";
Console.WriteLine(File.Exists(curFile) ? "File exists." : "File does not exist.");
или я что-то не понял?


Цитата:
Сообщение от Korshi Посмотреть сообщение
Чтобы узнать, есть доступ по локальной сети к файлу или нет?
на что доступ то? На то, чтобы увидеть этот файл в папке?
На то, чтобы открыть этот файл на чтение?
На то, чтобы открыть этот файл на запись?
На то, чтобы удалить этот файл?

а вообще, зачем Вам это всё?
Делайте с файлом всё, что Вам нужно, просто оберните код в обработку исключений (см. https://docs.microsoft.com/ru-ru/dot...de/exceptions/ )
и, если с файлом/доступом будет что-то не так, ваша обработка сообщит пользователю об ошибке.
Всё.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.06.2019, 15:27   #5
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

File.Exists всегда возвращает False и больше ничего. Поэтому нельзя понять: нет файла или нет доступа к локальной сети.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а вообще, зачем Вам это всё?
Может же быть задача: узнать, есть доступ к сетевому файлу или нет.
Korshi вне форума Ответить с цитированием
Старый 19.06.2019, 15:35   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

И для это достаточно открыть его с нужными правами и делать то, что надо, ловя ошибки. Все остальное гадание на кофейной гуще.
p51x вне форума Ответить с цитированием
Старый 19.06.2019, 15:39   #7
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

p51x, каким объектом и методом нужно открыть?
Korshi вне форума Ответить с цитированием
Старый 19.06.2019, 15:41   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Любым, какой нравится. Хоть просто FileInfo делайте и проверяйте Exists. Только как вам уже раз 100 говорили - наличие файла, доступ к нему не одно и тоже... да и доступ разный бывает.
p51x вне форума Ответить с цитированием
Старый 19.06.2019, 15:46   #9
Korshi
Пользователь
 
Регистрация: 30.04.2019
Сообщений: 44
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Только как вам уже раз 100 говорили - наличие файла, доступ к нему не одно и тоже... да и доступ разный бывает.
Например, удалённый компьютер выключен.
Программа должна увидеть, что компьютер выключен и сообщить юзеру: компьютер выключен.
Есть в C# готовый инструмент для этого?
Korshi вне форума Ответить с цитированием
Старый 19.06.2019, 15:48   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Нет. Т.к. это не возможно определить. Если я выдерну сетевой кабель из того компа - он выключен?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как проверить существование сетевого диска средствами c# SEWRUS C# (си шарп) 2 20.08.2012 09:25
Проверить существование файла на сервере Wicort JavaScript, Ajax 8 04.05.2012 23:16
Проверить существование папки Stepan575 Visual C++ 4 17.12.2010 19:02
Как проверить существование потока? John_chek Общие вопросы Delphi 3 17.01.2008 15:16