You can try making a handler for this work.It is more secure if you can modify well.
For this work,you need to encrypt file path in your page where you put a link for the file.
<a href=\"Downloads.ashx?f={0}\" target=\"_blank\">Your link to file</a>
//{0} -> Encrypted file path
//target = _blank force browser to download file in another window
There are lots of encryption techniques in here
In your Handler page, you need to decrypt the file path into original one so you can read it with System.IO
libraries.
context.Response.ContentType = ""; //-->MimeType for your file's extension
You can specify your MimeType by Registry unless your mime-type is static as images.
string mimeType = Registry.GetValue(string.Format(@"HKEY_CLASSES_ROOT\.{0}",
Path.GetExtension(decryptedfilePath)), "Content Type", null).ToString();
//Then everything is ready for download
byte[] buffer = File.ReadAllBytes(decryptedfilePath);
context.Response.OutputStream.Write(buffer, 0 , buffer.Length);
context.Response.Flush();
Good Luck.