PDA

Показать полную графическую версию : как запретить сохранять медиа-файлы на файл-сервере?


Страниц : [1] 2

Delirium
02-12-2008, 08:41
В данной ветке часто возникает вопрос - а как же можно ЗАПРЕТИТЬ копировать файлы определенных разрешений в некоторые папки на сервере? Дабы не кидали фильмы, музыку и прочее, но Server 2003 R2 с его File Resource Manager поставить нет возможности...
Чтобы помочь страждущим, предлагаю небольшую консольную утилитку. В чем её суть:
указываете в параметрах запуска папку на сервере и расширение, например так: fsw.exe \\server\share *.avi . Утилитка запустит простейший мониторинг данной папки и будет кидать в файл log.txt изменения, произошедшие в данной папке именно с указанными типами файлов.

Приведу исходный код и готовый exe:
using System;
using System.IO;

namespace FileSystemWatcherTest
{
class Class1
{
[STAThread]
static void Main(string[] args)
{

if (args.Length != 0)
{
try
{
// Создаем наблюдателя
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = args[0]; //первый параметр при запуске
// Будем следить за изменениями по последнему доступу,
// времени записи и переименованию файла или директорий
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Будем следить только за указанными файлами
watcher.Filter = args[1]; //второй параметр при запуске

// Добавляем обработчики событий
watcher.Changed += new FileSystemEventHandler(OnChanged);
watcher.Created += new FileSystemEventHandler(OnChanged);
watcher.Deleted += new FileSystemEventHandler(OnChanged);
watcher.Renamed += new RenamedEventHandler(OnRenamed);


// Включаем наблюдение
watcher.EnableRaisingEvents = true;

// Ждем пока пользователь не нажмет клавишу q
Console.WriteLine("Наблюдение запущено. Нажмите \'q\' для выхода.");
while (Console.Read() != 'q') ;
}
catch (Exception msg_ex)
{
Console.WriteLine(msg_ex.Message);
}
}
else
{
Console.WriteLine(@"Формат запуска: fsw.exe 1 2");
Console.WriteLine(@"1-путь до папки с указанием последнего слеша (C:\temp\ или \\server\share\)");
Console.WriteLine(@"2-тип файлов (*.jpg)");
Console.WriteLine("Логи пишутся в файл log.txt в папке с fsw.exe");

Console.WriteLine("Нажмите \'q\' для выхода.");
while (Console.Read() != 'q') ;
}

}

private static void OnChanged(object source, FileSystemEventArgs e)
{
StreamWriter sw;
sw = File.AppendText("log.txt");
sw.WriteLine(DateTime.Now.ToLocalTime().ToString() + " Файл: " + e.FullPath + " " + e.ChangeType);
sw.Close();
}

private static void OnRenamed(object source, RenamedEventArgs e)
{
StreamWriter sw;
sw = File.AppendText("log.txt");
sw.WriteLine("Файл: {0} был переименован в {1}", e.OldFullPath, e.FullPath);
sw.Close();
}

}

}
Соответственно, если вам необходимо просто вжесткую удалять файлы при попытке их копирования на сервер, можно просто добавить строку File.Delete(e.FullPath) после строк sw.Close(); и он будет удаляться.
Данный код можно практически без изменений сделать службой.

Не претендую на уникальность, но вдруг кому то пригодится :) Если будет необходимо, перепишу под нужные запросы/параметры.
P.S. Огромное спасибо Павлу Агурову и его книге "C# Сборник рецептов" за простые и понятные коды. Кстати, очень рекомендую.

Тема рассчитана на обладателей NT/2000/2003
Первые двоим нужно ещё .net 1.0 или 1.1 установить, прежде чем проследовать по инструкции по компиляции исходника. Обладателям NT он правда будет не к чему, а вот обладателям 2000-го думаю, что всё же нужен.
Обладатели 2003-го могут приступать сразу же к инструкции:
1)Скопируйте код из сообщения, вставьте в блокнот, сохраните его в файл, например под именем fsw.cs.
2)Зайдите в консоли в директорию в которую сохранили этот файл, наберите команду
%SystemRoot%\Microsoft.NET\Framework\v1.1.4322\csc.exe fsw.cs
в пути вместо .4322 может быть другое число в зависимости от установленного Сервис пака, данное справедливо для 2003 Sp2[/i]
4)В этой же директории Вы получите файл скомпилированный (exe) и готовый к работе файл.
Почему именно 1.1? Потому что он встроенный в 2003, не все обладатели последнего ставят 2.0, а то и 3.0/3.5.
Кстати он будет весить всего лишь 5,00 KB (5 120 bytes), чего там студия кроме иконки компилятору велела написать остаётся по ту сторону этой сборки ехе.

Oleg Krylov
02-12-2008, 13:45
Молодец! Спасибо.

AntohaV
10-12-2008, 12:54
Спасибо. Давно искал что-то подобное.
И вопросик: возможно что-бы мониторились файлики, во вложенных папках?

Delirium
11-12-2008, 01:23
Да. Достаточно добавить строку watcher.IncludeSubdirectories = true;

Delirium
12-12-2008, 09:39
Всё таки сегодня пятница, и поэтому я решился и переписал чутка программку.
В итоге получилась небольшая утилитка, сворачивающаяся в трей и позволяющая мониторить произвольное количество файлов и масок в любых папках. Внешний вид можно увидеть на http://kts.kna.ru/wnd.jpg, добавление папок показано на http://kts.kna.ru/restrict.JPG. Саму програмку можно пощупать на http://kts.kna.ru/FSW.rar (230 кб) .

Один минусик есть:
При создании мини базки я зачем то выбрал файл базы SQL Compact Server. Когда очнулся, и понял, что для ней нужно будет ставить компонент, уже все было написано :)
Для корректной работы нужен .Net Framework 2.0 и этот самый компонентик MS на 1,74 МБ. Его можно взять на http://kts.kna.ru/SSCERuntime-ENU.msi. Не корите сильно, сам знаю, что затупил :) Ну если уж совсем туго будет, перепишу без этого компонентика :)

P.S. надеюсь, понравится... :)

kdesys
24-02-2009, 18:12
Может кто-нибудь скачавший выложит на другом ресурсе? Сервер kts.kna.ru к сожалению не доступен. :-(

Delirium
25-02-2009, 01:34
Исправляю ошибку. Выложил файлы на своей машине и выключаю иногда. Вот постоянные ссылки:
http://rapidshare.de/files/45604898/FSW.rar.html - fsw.rar
http://rapidshare.de/files/45604946/...e-ENU.msi.html - SQL Compact Server.

kdesys
25-02-2009, 10:40
Отличная утилита, хорошо работает. Спасибо.
Неплохо было бы сделать экспорт/импорт настроек, включить возможность редактирования внесенных настроек, а также отключение протоколирования.

kdesys
25-02-2009, 12:05
Неплохо было бы сделать экспорт/импорт настроек, включить возможность редактирования внесенных настроек, а также отключение протоколирования. »

Ну и чтобы совсем было хорошо жить, сделать галочку/кнопочку для инсталлирования сервиса. Ато после ребута опять необходимо входить в сеанс пользователем и запускать софтинку.

Delirium
26-02-2009, 01:49
Неплохо было бы сделать экспорт/импорт настроек »
Достаточно сохранить mdf файл, в нем хранятся все настройки.
По поводу остального подумаю :) Сейчас просто времени не хватает на все проекты :)

kdesys
26-02-2009, 09:31
Достаточно сохранить mdf файл, в нем хранятся все настройки.

Файл к сожалению не mdf, а sdf и отредактировать его содержимое я не знаю как. Да и держать отдельный софт для редактирования sdf как-то некрасиво.

По поводу остального подумаю Сейчас просто времени не хватает на все проекты

Пожалуйста, найдите пару часиков, очень полезная штука.

Delirium
27-02-2009, 02:36
Торжественно обещаю в ближайшее время переделать программку, дабы она не работала с sql клиентом. Возможно, будет храниться или в простом txt или в xml.
Что планирую добавить:
экспорт/импорт настроек »
озможность редактирования внесенных настроек »
отключение протоколирования »
галочку/кнопочку для инсталлирования сервиса »
Расширить функциональность лог-файла, чтобы отображался в таблице с указанием имени пользователя и других атрибутов + возможности быстро открыть папку, содержащую файл.

kdesys
06-03-2009, 09:40
Торжественно обещаю в ближайшее время переделать программку, дабы она не работала с sql клиентом. »

Здравствуйте.

Хотелось бы узнать, как продвигается разработка?

masus
03-04-2009, 20:16
как запретить сохранять медиа файла на файл-сервере?
Доброго времени суток господа, вот перед мной став вопрос как запретить копировать и сохранять медия файлы (*.avi, *mp3, ну и тд) на файл-сервер?
Хотелось бы это сделать всем юзерям кроме определенной группы лиц (начальство) ну и себе любимому тоже.
Подскажите, как можно решить эту проблему?
Можно ли это решить средствами винды?
Возможно ли это сделать средствами Group Policy, если да то подскажите как это сделать?

З.Ы. Не много о сети AD Win 2003, отдельно стоит фал-сервер тк же под win2003

Dimas_83
03-04-2009, 22:37
http://forum.oszone.net/thread-108774.html
http://forum.oszone.net/thread-83861.html

Delirium
06-04-2009, 01:22
Если просто всем удалять файлы, то вам сюда:
http://forum.oszone.net/showthread.php?t=124747&highlight=%E7%E0%EF%F0%E5%F2+%EA%EE%EF%E8%F0%EE%E2%E0%ED%E8%FF+%EE%EF%F0%E5%E4%E5%EB%E5%ED%ED%FB%F5

А если с разграничением прав, то 2003 Server R2.

Delirium
06-04-2009, 01:26
Давно не писал. Пока разработка не двигается в связи с двумя проблемами:
1. Я сменил квартиру и теперь прет ремонт полным ходом.
2. Я удалил случайно исходники FSW :cry: :laugh: Т.к. программа проста, то просто напишу заново с учетом предложений, указанных выше.

kdesys
03-08-2009, 18:01
просто напишу заново с учетом предложений, указанных выше »
Есть новости?

Delirium
04-08-2009, 01:19
kdesys, к сожалению нет, навалили другой работы, в том числе и связанной с программированием. Так что увы, пока тишина ;(

Nitrokamer
26-08-2009, 07:33
Delirium, Народ требует продолжения проекта... очень актуально!




© OSzone.net 2001-2012