Arduino web server, client download simuntaniously whith loop working

I have a arduino with sd and Ethernet shield, it is measuring some information and writing them down on a SD card. Also it is a web server enabling someone to download that informations from the server. For know it works ok, i made the web server part as a function and call it in the loop on a feew parts of the code (because having time delay in the code). Now i dont have much information on the sd so the files are not big, but with time it will be bigger, and what i want to know is:
If someone tries to download the files when they are big, will the rest of the code which needs to work every 10 seconds do that or will it wait the download to finish, if it will way it to finish how then to avoid that?

will the rest of the code which needs to work every 10 seconds do that or will it wait the download to finish

The rest of what code?

If someone tries to download the files when they are big, will the rest of the code which needs to work every 10 seconds do that or will it wait the download to finish, if it will way it to finish how then to avoid that?

There is no real multitasking. If you use the standard ethernet library that comes with the IDE, then each ethernet client must wait for the previous client connections to finish before being serviced, no matter the size of the download. The goal is to keep the downloads as small and fast as possible.

There are ways to improve the performance of the SD and w5100 with a download. Search the forum for zoomkat's web server with SD file access. He uses a 64 byte buffer to get a 4x download speed increase.

edit: Here is the thread with my original post about this.
http://forum.arduino.cc/index.php?topic=134868.0

Well i have these two methodes in the code

void ListFiles(EthernetClient client, uint8_t flags) {
  // This code is just copied from SdFile.cpp in the SDFat library
  // and tweaked to print to the client output in html!
  dir_t p;

  root.rewind();
  client.println("<ul>");
  while (root.readDir(&p) > 0) {
    // done if past last used entry
    if (p.name[0] == DIR_NAME_FREE) break;

    // skip deleted entry and entries for . and  ..
    if (p.name[0] == DIR_NAME_DELETED || p.name[0] == '.') continue;

    // only list subdirectories and files
    if (!DIR_IS_FILE_OR_SUBDIR(&p)) continue;

    // print any indent spaces
    client.print("<li><a href=\"");
    for (uint8_t i = 0; i < 11; i++) {
      if (p.name[i] == ' ') continue;
      if (i == 8) {
        client.print('.');
      }
      client.print((char)p.name[i]);
    }
    client.print("\">");

    // print file name with possible blank fill
    for (uint8_t i = 0; i < 11; i++) {
      if (p.name[i] == ' ') continue;
      if (i == 8) {
        client.print('.');
      }
      client.print((char)p.name[i]);
    }

    client.print("</a>");

    if (DIR_IS_SUBDIR(&p)) {
      client.print('/');
    }

    // print modify date/time if requested
    if (flags & LS_DATE) {
      root.printFatDate(p.lastWriteDate);
      client.print(' ');
      root.printFatTime(p.lastWriteTime);
    }
    // print size if requested
    if (!DIR_IS_SUBDIR(&p) && (flags & LS_SIZE)) {
      client.print(' ');
      client.print(p.fileSize);
    }
    client.println("</li>");
  }
  client.println("</ul>");
}

// How big our line buffer should be. 100 is plenty!
#define BUFSIZ 100

void web(){
  char clientline[BUFSIZ];
  int index = 0;

  EthernetClient client = server.available();
  if (client) {
    // an http request ends with a blank line
    boolean current_line_is_blank = true;

    // reset the input buffer
    index = 0;

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        // If it isn't a new line, add the character to the buffer
        if (c != '\n' && c != '\r') {
          clientline[index] = c;
          index++;
          // are we too big for the buffer? start tossing out data
          if (index >= BUFSIZ) 
            index = BUFSIZ -1;

          // continue to read more data!
          continue;
        }

        // got a \n or \r new line, which means the string is done
        clientline[index] = 0;

        // Print it out for debugging
        Serial.println(clientline);

        // Look for substring such as a request to get the root file
        if (strstr(clientline, "GET / ") != 0) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();

          // print all the files, use a helper to keep it clean
          client.println("<h2>Files:</h2>");
          ListFiles(client, LS_SIZE);
        } 
        else if (strstr(clientline, "GET /") != 0) {
          // this time no space after the /, so a sub-file!
          char *filename;

          filename = clientline + 5; // look after the "GET /" (5 chars)
          // a little trick, look for the " HTTP/1.1" string and 
          // turn the first character of the substring into a 0 to clear it out.
          (strstr(clientline, " HTTP"))[0] = 0;

          // print the file we want
          Serial.println(filename);

          if (! file.open(&root, filename, O_READ)) {
            client.println("HTTP/1.1 404 Not Found");
            client.println("Content-Type: text/html");
            client.println();
            client.println("<h2>File Not Found!</h2>");
            break;
          }

          Serial.println("Opened!");

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/plain");
          client.println();

          int16_t c;
          while ((c = file.read()) > 0) {
            // uncomment the serial to debug (slow!)
            //Serial.print((char)c);
            client.print((char)c);
          }
          file.close();
        } 
        else {
          // everything else is a 404
          client.println("HTTP/1.1 404 Not Found");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<h2>File Not Found!</h2>");
        }
        break;
      }
    }
    // give the web browser time to receive the data
    delay(1);
    client.stop();

  }

}

And this web method of function however you call it, is there to checks if client connects to server and wants to download something. In the loop i call web(). So the thin i was asking is when i call the web(), and the download is taking long, can the loop function continue while download is continuing, That question would mean something like, is it possible to have two loop functions, i ques not but need to ask.

Well, considering this is the programming question part, i could ask this to: I have these two functions which makes my web server, when i enter the ip of the server in web browser, it opens regular and i see the files and folders in root. Now when i click on the file it opens, but when i click on a folder it opens a page with a dot, and i cannot se the files and folders contained in the folder. If i enter a adress of a txt file for example ip/2013/9/dat.txt it opens it, but if i try ip/2013 or ip/2013/9 it just opens a page with a dot :S doesn't show whats in the folder. How to make it showing whats in the subfolders?

I haven't tried making a web server which supports multiple concurrent client connections, which I think is what you're asking for, but as far as I can see the API would support it. Whether the underlying implementation would support it as well, you'd have to find out by testing it. Since the Ethernet library comes with a Chat example that looks as if it's trying to support multiple concurrent clients, I think there's a good chance that it would work.