Think about what is actually happening when somebody visits a web page
A TCP connection is made (over port 80 for websites, MOST of the time), you'll have to setup the Ethernet shield to open up port 80 and listen for this connection
a HTTP "GET" request is sent from the browser, specifying the page that they are looking for (there are other headers, like user agent, but we don't care for now)
your Arduino needs to catch this request, parse it, figure out which file is being requested
your Arduino needs to read the file from the SD card, at this point, you MUST know the file size in order to generate a proper content length for the next step
send the HTTP response header back, this usually includes the status code (404 for page not found, 200 for success, 500 for internal server error, etc), the data type is an important field, and so is content length
send the data from the SD card after content length is sent, I suggest doing it in 512 byte chunks (caching it in RAM from the SD card before sending it from RAM to Ethernet shield) because that's the size of any single read operation of a SD card, and it's also the sector size, most SD/FAT libraries use 512 bytes. To answer your question, the two devices cannot work simultaneously.
You can try playing with "developer tools" of your web browser, if it supports viewing HTTP headers. Or use a tool called Fiddler2.
Or you can find a library that does all this for you. But if you have POST requests, or any query strings in the GET request, you'll need to learn how to handle them manually. Cookies, user agent, error codes, these things all require you to understand HTTP