2012-04-18 26 views
0
byte[] bFileName = new byte[512]; 
r2Socket.Receive(bFileName); 
String FileName = Encoding.UTF8.GetString(bFileName); 
System.Windows.Forms.MessageBox.Show(FileName); // It's Ok. Show FileName = "text.jpg" 

FileStream = new FileStream("D:\\" + FileName, FileMode.Create, FileAccess.Write); 

のFileStream ArgumentExceptionがのFileStream例外

パスは、空の文字列( "")でのみホワイトスペースが含まれている、または1つ以上の無効な文字が含まれています。 - または - パスは、NTFS環境で "con:"、 "com1:"、 "lpt1:"などの非ファイルデバイスを参照します。

どうしてですか?どうも。

==

//CLIENT 
byte[] bFileName = new byte[512]; 
Socket Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
Socket.Connect(textBoxIP.Text, int.Parse(textBoxPORT.Text)); 
FileInfo sFileInfo = new FileInfo(textBoxFILE.Text); 
string FileName = sFileInfo.Name; 
bFileName = Encoding.UTF8.GetBytes(FileName); 
Socket.Send(bFileName); 
//SERVER 
Socket rSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPAddress rIPAddress = Dns.GetHostEntry("localhost").AddressList[0]; 
IPEndPoint rIPEndPoint = new IPEndPoint(IPAddress.Any, int.Parse(textBoxPORT2.Text)); 
rSocket.Bind(rIPEndPoint); 
rSocket.Listen(1); 
byte[] bFileName = new byte[512]; 
r2Socket.Receive(bFileName); 
String FileName = Encoding.UTF8.GetString(bFileName); 
+0

あなたは 'FileName'が空でないと有効なファイル名を持っていることを確認していますか? 'Path.Combine()'を使ってパスを組み合わせるのではなく、 '+ 'を使うほうが良い。 – abhilash

+1

ソケットから読み込んでいるので、ファイル名に空白文字がないことを確認する。メッセージボックスの表示には表示されません。簡単なチェック方法は、ファイル名とファイル名の長さを表示することです。 – Josh

+0

FileStream =新しいFileStream(Path.Combine(textBoxPATH.Text、 "i.jpg")、FileMode.Create、FileAccess.Write); //仕事です! – Andrey

答えて

0

私はあなたがUTF-8を使用しているからだと推測するつもりだ、とNTFSは何か他のものを使用して、このように無効な文字エラー。別のエンコーディングを試してみます。

チェックアウトこのSOポスト:What encoding are filenames in NTFS stored as?

+0

文字列FileName = Encoding.Default.GetString(bFileName); //うまくいません – Andrey

+0

私はEncoding.Unicodeを考えていました。上記の投稿はOSが使用していると思われるからです。 – Joshua

+0

Encoding.Unicode.GetString(bFileName)は正確に何を返しますか? – Joshua