2013-05-04 7 views
-5

Le programme est destiné à définir le chemin du fichier et l'idée est que lorsque les données est défini, il devrait utiliser cette fonction:FileStream jette Fichier introuvable

public void SendFile(String fileName, long fileSize, NetworkStream io) 
    { 
     SendFileNameToServer(); 
     SendFileSizeToServer(); 

     byte[] fileData; 

     try 
     { 
      if (!File.Exists(fileName)) 
      { 
       throw new FileNotFoundException("File does not exist!"); 
      } 
      FileStream openFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); 
      BinaryReader bReader = new BinaryReader(openFileStream); 

      Int32 remainingSize = Convert.ToInt32(_fileSize); 


      do 
      { 
       fileData = bReader.ReadBytes(BUFSIZE); 
       io.Write(fileData, 0, BUFSIZE); 
       remainingSize -= BUFSIZE; 
      } while (remainingSize > BUFSIZE); 

      do 
      { 
       fileData = bReader.ReadBytes(remainingSize); 
       io.Write(fileData, 0, remainingSize); 
       remainingSize -= remainingSize; 
      } while (remainingSize > 0); 

      bReader.Close(); 
      openFileStream.Flush(); 
      openFileStream.Close(); 
      io.Flush(); 
      io.Close(); 
     } 
     catch (Exception) 
     { 
      throw new Exception(); 
     } 
    } 

pour envoyer le fichier donné dans le chemin du fichier à un programme côté serveur qui reçoit les données du fichier.

Le problème est que quand il arrive à la ligne FileStream openFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); il me dit que le fichier est introuvable. L'exception qu'il donne est Exception:Thrown: "The process cannot access the file 'D:\StepMania\Songs\Fragma\You Are Alive\Green.avi' because it is being used by another process." (System.IO.IOException) A System.IO.IOException was thrown: "The process cannot access the file 'D:\*FilePath*\Green.avi' because it is being used by another process." Time: 04-05-2013 21:11:39 Thread:Main Thread[5532] mais je ne peux pas penser à un processus qui utiliserait ce fichier lorsque StepMania ne fonctionne pas. Je sais que le fichier est là parce que je vérifie le chemin du fichier et il est là comme il se doit. Cela fonctionne très bien si le fichier est dans le même dossier que le programme mais à part ça, je n'arrive pas à trouver la solution à ce problème. Est-ce que quelqu'un a des idées sur ce qui pourrait être faux?

Si vous avez besoin de plus de mon code, s'il vous plaît dites-moi.

Edit: Mon serveur utilise ce code pour recevoir le fichier:

public void ReceiveFile(String fileName, NetworkStream io) 
    { 
     // TO DO Din egen kode 
     byte[] fileData = new byte[BUFSIZE]; 

     FileStream writeFileStream = new FileStream(fileName, FileMode.Create); 
     BinaryWriter bWrite = new BinaryWriter(writeFileStream); 

     int bytesRead = 0; 
     long remainingSize = Convert.ToInt32(_fileSize); 

     do 
     { 
      Console.WriteLine("Remaining number of bytes: {0}", remainingSize); 
      bytesRead = io.Read(fileData, 0, BUFSIZE); // Read max 1000 bytes from server via socket (actual value is placed in "bytesRead" 
      bWrite.Write(fileData, 0, bytesRead); // write the received bytes into file. the number of received bytes is placed in "bytesRead" 
      remainingSize -= bytesRead; 
     } 
     while (remainingSize > 0); 

     writeFileStream.Flush(); 
     writeFileStream.Close(); 
     bWrite.Close(); 
    } 

Répondre

0

Ok, je trouve le problème: Mon programme côté serveur interefered avec mon programme côté client. Voici le code fixe pour le code SendFile de mon programme client:

public void SendFile(String fileName, long fileSize, NetworkStream io) 
    { 
     SendFileNameToServer(); 
     SendFileSizeToServer(); 

     byte[] fileData; 

     try 
     { 
      FileStream openFileStream = File.OpenRead(fileName); 
      BinaryReader bReader = new BinaryReader(openFileStream); 

      Int32 remainingSize = Convert.ToInt32(_fileSize); 


      do 
      { 
       fileData = bReader.ReadBytes(BUFSIZE); 
       io.Write(fileData, 0, BUFSIZE); 
       remainingSize -= BUFSIZE; 
      } while (remainingSize > BUFSIZE); 

      do 
      { 
       fileData = bReader.ReadBytes(remainingSize); 
       io.Write(fileData, 0, remainingSize); 
       remainingSize -= remainingSize; 
      } while (remainingSize > 0); 

      openFileStream.Flush(); 
      bReader.Close(); 
      openFileStream.Close(); 
      io.Flush(); 
      io.Close(); 
     } 
     catch (Exception) 
     { 
      throw new Exception(); 
     } 
    } 

Voici le code ReceiveFile pour mon serveur:

public void ReceiveFile(String fileName, NetworkStream io) 
    { 
     // TO DO Din egen kode 
     byte[] fileData = new byte[BUFSIZE]; 

     FileStream writeFileStream = new FileStream(LIB.extractFileName(fileName), FileMode.Create); 
     BinaryWriter bWrite = new BinaryWriter(writeFileStream); 

     int bytesRead = 0; 
     long remainingSize = Convert.ToInt32(_fileSize); 

     do 
     { 
      Console.WriteLine("Remaining number of bytes: {0}", remainingSize); 
      bytesRead = io.Read(fileData, 0, BUFSIZE); // Read max 1000 bytes from server via socket (actual value is placed in "bytesRead" 
      bWrite.Write(fileData, 0, bytesRead); // write the received bytes into file. the number of received bytes is placed in "bytesRead" 
      remainingSize -= bytesRead; 
     } 
     while (remainingSize > 0); 

     writeFileStream.Flush(); 
     writeFileStream.Close(); 
     bWrite.Close(); 
    } 

Encore une fois, je vous remercie tous ceux qui ont répondu à mon poste!

+0

N'oubliez pas de marquer cette réponse comme "acceptée". –

+0

@MatthewWatson Il dit qu'il faut attendre jusqu'à demain avant d'accepter ma propre réponse ... – user2350376