2011-08-06 29 views
0

我創建了一個小型FTP程序,它僅供我自己使用,因此登錄詳細信息+文件路徑是硬編碼的。StreamReader ReadToEnd()給出不同服務器上的txt文件的不同結果

我有一個按鈕,它開始下載兩個txt文件的過程 - 這些文件的內容被放到兩個不同的文本框中。

的TXT文件進行編碼以UTF-8,和看起來像這樣:

line1 
line2 
line3 
etc. 

我已經放置在兩個不同的服務器(每個服務器上的兩個文件)這兩個文件。在服務器1中,這兩個文件被下載,並在文本框中正確顯示,是這樣的:

line1 
line2 
line3 
etc. 

在服務器2,這兩個文件都是這樣下載並顯示在文本框:

line1line2line3etc. 

我真的不明白爲什麼 - 我有不是編輯軟件(下載過程)也沒有文件,我當然只是編輯硬編碼的文件路徑,因爲服務器的變化。

這是我下載的文件(在另一個文件是同樣的,只是名稱不同)中的一個:

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(folder + artistsFileNameTxt); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(login, pass); 
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(responseStream); 

tbxArtists.Text = reader.ReadToEnd(); 

reader.Close(); 
response.Close(); 

任何幫助嗎?

+1

是重新設置服務器之間的區別?如果您從兩臺服務器下載文件,您會看到什麼?你可以驗證兩個下載的版本是否有相同的行結束符(可能是CR LF)? – svick

+0

@svick:第一個服務器是Windows,不知道另一個。兩個下載版本都具有相同的行尾:CR LF。 – eightx2

回答

2

嘗試

request.UseBinary = false; 

默認值是true ......做到這一點,只有當你確信你正在處理一個文本文件。

FTP協議有此「內置」,以應對regardings換行符系統的差異...

BTW通過FTP上傳過,否則會導致混亂,當你必須正確設置此設置...

http://msdn.microsoft.com/en-us/library/system.net.ftpwebrequest.usebinary.aspx
http://www.rhinosoft.com/newsletter/NewsL2008-03-18.asp

+0

非常感謝,這是完美的工作! – eightx2

1

我的猜測是第一個服務器是windows,而第二個是linux。 的Windows新行:\ r \ n Linux的新行:\ n 不是在Windows中正確顯示

+0

我知道第一個是Windows服務器,不知道另一個。 – eightx2

0

嘗試

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(folder + artistsFileNameTxt); 
request.Method = WebRequestMethods.Ftp.DownloadFile; 
request.Credentials = new NetworkCredential(login, pass); 
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); 
Stream responseStream = response.GetResponseStream(); 
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8); 

tbxArtists.Text = reader.ReadToEnd(); 

reader.Close(); 
response.Close(); 
相關問題