определить, открыт ли файл перед загрузкой в элемент управления fileupload

#c# #asp.net #file-upload

#c# #asp.net #загрузка файла

Вопрос:

Как я могу определить, закрыт ли файл, который загружает пользователь, перед нажатием кнопки загрузки при использовании диалогового элемента управления FileUpload в C # ASP.net. Это предотвратит отправку пользователем файла с несохраненными данными на сервер для обработки.

Ответ №1:

AFAIK, вы не можете. Файл будет либо:

  • A) Быть отправленным без сброшенных изменений, или
  • Б) Вызывает проблему, если файл не может быть открыт для отправки содержимого (т. Е. Открыт с помощью какой-либо блокировки) — однако точка, в которой это происходит, скорее всего, находится в диалоговом окне «Открыть файл», так что проблема пользовательской системы.

Ответ №2:

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

Шаги в общем виде следующие:

1. Вы можете использовать виртуальную файловую систему, такую как CBFS или другие библиотеки с открытым исходным кодом (извините, у меня нет практического опыта работы с чем-либо, кроме CBFS) — http://www.eldos.com/solutions/solutions-for-developers.php#commchannel

2. Создайте виртуальную файловую систему таким образом, чтобы она отображалась либо в хранилище базы данных, либо в хранилище на стороне сервера

3. Сопоставьте это как каталог в системах конечных пользователей

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

Комментарии:

1. Спасибо @Johnv2020. После обсуждения этого с владельцем проекта они решили сократить это требование до окна сообщения, предупреждающего пользователя о том, что файл закрыт. На данном этапе разработки это кажется самым разумным способом.

2. Удивительно, как владелец проекта меняет спецификации, как только понимает, что решение будет стоить денег и займет время, не так ли..

Ответ №3:

Это зависит от того, как пользователь редактирует ваш файл. Например, Word и Notepad, начиная с Windows Vista или 7, блокируют файл, чтобы никто другой не мог в них записывать. В этом случае это так же просто, как открыть файл, доступный для записи, и проверить, не возникает ли исключение IOException.

 static bool IsWriteProtected(string file)
{
    try
    {
        using (File.OpenWrite(file)) ;
    }
    catch (UnauthorizedAccessException ex)
    {
        return true;
    }

    return false;
}
  

Ваш,
Alois Kraus

Комментарии:

1. Это позволяет проверять файлы только на стороне сервера

2. Исправьте @m.edmondсо, мне нужно проверить клиентскую часть перед отправкой файла. Я думал о создании элемента управления ActiveX, это невозможно, но я хотел уточнить у сообщества и посмотреть, не придумал ли кто-нибудь еще способ.

3. извините, пожалуйста. Похоже, что обычный Java Script в браузере не может получить доступ к вашей локальной файловой системе. Если у вас достаточно прав, то эта ссылка должна помочь: c-point.com/JavaScript/articles/file_access_with_JavaScript.htm