Можно ли получить доступ к общему ресурсу FILESTREAM? - PullRequest
2 голосов
/ 03 сентября 2010

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

Ответы [ 2 ]

4 голосов
/ 03 сентября 2010

Вы не можете получить доступ к общему ресурсу Filestream напрямую и исследовать его. Любое открытие файла Filestream должно выполняться с использованием пути, извлеченного из SQL Server, и с использованием NtCreateFile (или оболочки) с соответствующим контекстом транзакции, передаваемым через EABuffer.

Можно создать новый общий ресурс и указать его на физическое расположение файлов, однако это довольно бессмысленно, поскольку не существует поддерживаемого способа преобразования строки файлового потока SQL в физическое местоположение файла (драйвер фильтра RsFx обрабатывает эти внутреннее преобразование), местоположение файла может измениться в любое время из-за одновременных обновлений / изменений раздела, и вам нужно ослабить безопасность папки до недопустимого уровня. Это также может привести к повреждениям в базе данных, если вы перемещаете или удаляете файлы без ведома SQL Server. Любые блокировки физических файлов будут мешать удалению, как указано в комментарии dportas.

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

1 голос
/ 03 сентября 2010

Да, это возможно. Суть файлового потока, однако, в том, что вы получаете этот доступ через API файлового потока, а не напрямую через файловую систему. Помните, что имя файла может измениться без предупреждения - например, обновления могут привести к созданию нового файла filestream. Возможно, если вы держите блокировки файловой системы (даже общие блокировки) для файла, который необходим SQL Server, это может вызвать проблему конфликта. Поэтому, если вы обращаетесь к данным напрямую через файловую систему, результаты не будут поддерживаться и могут быть ненадежными - но опять же, это может работать: -)

...