2015-09-25 50 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);...}