2015-09-25 41 views
-1

我在c#中创建了一个TCP服务器,它从客户端接收文件并将其保存在当前目录中。执行此操作的代码段如下所示:在c#套接字中更改收到的文件位置

 using (FileStream fStream = new FileStream(Path.GetFileName(cmdFileName), FileMode.Create)) 
      { 
       fStream.Write(buffer, 0, buffer.Length); 
       fStream.Flush(); 
       fStream.Close(); 
      } 

     Console.WriteLine("File received and saved in " + Environment.CurrentDirectory); 

其中cmdFileName是接收的文件名。

现在我已经创建了一个名为“测试”使用下面的代码将当前目录文件夹里面:

  string root = Environment.CurrentDirectory; 
      string folder = Path.Combine(root,"test"); 
      if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); 

我想保持接收到的文件“测试”文件夹内。我需要改变我以前的代码段的以下行:

using (FileStream fStream = new FileStream(Path.GetFileName(cmdFileName), FileMode.Create)) 

但是我会做出什么改变?

+0

你只是想在不覆盖相同的文件名来创建一个新的文件? –

+0

我想将我从客户端收到的文件保存在测试文件夹中,而不是保存在当前目录@ Some1Pr0 – ACE

回答

1

您正在使用Path.Combine来获得新的test目录的路径 - 你只需要再次使用它找到test目录内cmdFileName文件的路径:

string cmdFilePath = Path.Combine(folder, Path.GetFileName(cmdFileName)); 
using (FileStream fStream = new FileStream(cmdFilePath, FileMode.Create)) 
0

此代码后:

string root = Environment.CurrentDirectory; 
string folder = Path.Combine(root,"test"); 
if (!Directory.Exists(folder)) Directory.CreateDirectory(folder); 

,因为你要的路径folder附加文件cmdFileName添加Path.Combine的另一种用法:

string fullFilePath = Path.Combine(folder, Path.GetFileName(cmdFileName)); 
using (FileStream fStream = new FileStream(fullFilePath, FileMode.Create)) 
{ 
    ... 
} 

Console.WriteLine("File received and saved in " + fullFilePath); 

你也应该要去做一个try块内,以宣布它成功,只有当它真的做到了:

try 
{ 
    using (FileStream fStream = new FileStream(fullFilePath, FileMode.Create)) //Exception accessing the file will prevent the console writing. 
    { 
     ... 
    } 
    Console.WriteLine("File received and saved in " + fullFilePath); 
} 
catch (...){...Console.WriteLine("Could not write to file " + fullFilePath);...}