Ok I'll try something
First try this code :
//I am assuming Prg.source_path is the url of the file you want
// Something like : http://www.example.com/my_file.zip
HttpWebRequest wrq = (HttpWebRequest)WebRequest.Create(Prg.source_path);
//You should be getting only the response header
wrq.Method = "HEAD";
using(var wrs = (HttpWebResponse)wrq.GetResponse()){
//Do something logic here...
Console.WriteLine("Content Length is : {0}", wrs.ContentLength);
}
Please ensure that the url of the file you are trying to download is the DIRECT url of the file. If you're being redirected to another location, the header of the response will be the size of the redirect response.
If that code still fails to provide you the correct file size, my guess is that you're either being redirected, or the response is indeed flawed and inaccurate (which is unlikly, but possible).
Can you provide the url's of the files you are trying to download or at least the requests and responses you're sending and getting ?
EDIT 02/04/2013: Also check this question : CSS, Javascript and Images have zero length
See the answer from Adrian Grigore, check that "Control Panel -> Windows Features -> World Wide Web Services - > Common HTTP Features -> Static Content" is checked. If not, check it, restart IIS (or the entire machine, you never know) and try again.