Копирование файла является относительно простой операцией как показано примерами ниже, но необходимо вместо этого использовать shutil stdlib модуль для этого.
def copyfileobj_example(source, dest, buffer_size=1024*1024):
"""
Copy a file from source to dest. source and dest
must be file-like objects, i.e. any object with a read or
write method, like for example StringIO.
"""
while True:
copy_buffer = source.read(buffer_size)
if not copy_buffer:
break
dest.write(copy_buffer)
, Если Вы хотите скопировать именем файла, Вы могли бы сделать что-то вроде этого:
def copyfile_example(source, dest):
# Beware, this example does not handle any edge cases!
with open(source, 'rb') as src, open(dest, 'wb') as dst:
copyfileobj_example(src, dst)
Хорошее место для изучения того, как использовать Global.asax, - это прочитать Краткое руководство по использованию ASP.NET . У вас есть по одному на каждое веб-приложение / сайт. Это что-то вроде событий глобального уровня.
Имейте в виду, что событие Application_End не срабатывает часто на большинстве серверов. Он будет срабатывать только в том случае, если пул приложений IIS выгружен / переработан, изменен web.config, сборки изменены в / Bin или в другой ситуации, когда веб-сервер останавливается. На популярном сайте может пройти несколько недель или месяцев до того, как ваше мероприятие начнется.
Ссылка MSDN и Ссылка на Википедию - это места для начала.
Он используется не как интерфейс, а скорее как фильтр, имеющий множество различных ловушек для таких вещей, как запуск объекта Application, сеанса или запроса. Ссылка на Википедию содержит список вызовов, которые может выполнять Global.asax, хотя я бы предложил на мгновение отступить, чтобы понять, как заканчивается веб-приложение по сравнению с настольным приложением. IIS может повторно использовать пул приложений как один из способов завершения работы приложения, хотя есть и другие способы, поэтому установка очистки на конце приложения может быть не лучшей идеей, если это событие никогда не срабатывает.