По истечении таймера текущий контекст HTTP отсутствует. Это связано с тем, что события таймера не связаны с конкретным HTTP-запросом.
Что вы должны сделать, это использовать HttpServerUtility.MapPath, где доступен HTTP-контекст. Вы можете сделать это в одном из событий конвейера запросов (например, Page_Load) или в событии Global.asax, например Application_Start.
Назначьте результат MapPath переменной, доступной из события Timer.Elapsed, где вы можете использовать Path.Combine, чтобы получить местоположение нужного вам файла.