2011-01-19 9 views
0

オンラインから.txtファイルを取得することに興味があります。C#でのストリームの使用

txtファイルストアは:

ファイル名 MD5ハッシュ ファイル名 MD5ハッシュ

私は、ローカルファイルへのデータを比較し、オンラインからのデータを得ることに興味を持っています。

 byte[] buffer = new byte[512]; 
     WebRequest test = WebRequest.Create("http://www.domain.com/file.txt"); 
     Stream something = test.GetRequestStream(); 
     something.Read(buffer,0,20); 

私はかなりの流れを理解し、どのようにファイルから1行だけ読み込みについて行くにはありません。私は最初にファイルをダウンロードしてからデータを取得したくありません。私はちょうどそれをオンラインから引っ張ることに興味があります。 StreamWriterとStreamReaderを使用した場合の「ストリーム」と通常のIOの違いは何ですか?

EDIT--

 WebRequest myWebRequest = WebRequest.Create("http://www.domain.com/file.txt"); 

     WebResponse myReponse = myWebRequest.GetResponse(); 

     Stream recStream = myReponse.GetResponseStream(); 

     StreamReader reader = new StreamReader(recStream); 

     txt_status.Text = reader.ReadLine(); 

答えて

2

GetRequestStreamに書き込むためのストリームを提供します。それはすでにたTextReaderあるとしたTextReaderへのStreamReaderをキャストする理由:あなたは返されたデータをウォークスルーしたい場合はGetResponseStream

... 

Stream ReceiveStream = myWebResponse.GetResponseStream(); 

    Encoding encode = System.Text.Encoding.GetEncoding("utf-8"); 

     // Pipe the stream to a higher level stream reader with the required encoding format. 
    StreamReader readStream = new StreamReader(ReceiveStream, encode); 
    Console.WriteLine("\nResponse stream received"); 
    Char[] read = new Char[256]; 

     // Read 256 charcters at a time.  
    int count = readStream.Read(read, 0, 256); 
     Console.WriteLine("HTML...\r\n"); 

    while (count > 0) 
    { 
      // Dump the 256 characters on a string and display the string onto the console. 
     String str = new String(read, 0, count); 
     Console.Write(str); 
     count = readStream.Read(read, 0, 256); 
    } 

... 
+0

RoRは、行単位の読み取りが必要です - リーダーのReadLineはその場合にはうまくいくでしょう。 –

2

テキストを読んでいる場合は、たTextReader

WebRequest test = WebRequest.Create("http://www.domain.com/file.txt"); 
Stream something = test.GetRequestStream(); 
TextReader reader = (TextReader)new StreamReader(something); 
string textfile = reader.ReadToEnd(); 
+0

1 Ajmaを利用します。 RoR:ReadToEndの代わりにReadLineを使用します。 –

0

にすべてのストリームをされて使用してみてください、バイトのシーケンスです。 MemoryStreams、FileStreamをは、などすべてが(テストされていません)あなたは、単にMD5は、ローカルファイルに対して持って比較しようとする場合は、次のような何かができるSystem.IO.Stream

継承:

// Download File 
WebClient wc = new WebClient(); 
byte[] bytes = wc.DownloadData(); 

MD5 md5 = System.Security.Cryptography.MD5.Create(); 
byte[] hash = md5.ComputeHash(bytes); 

StringBuilder onlineFile = new StringBuilder(); 
for (int i = 0; i < hash.Length; i++) 
{ 
    onlineFile.Append(hash[i].ToString("X2")); 
} 

// Load Local File 
FileStream fs = new FileStream(@"c:\yourfile.txt",FileMode.Open); 
byte[] fileBytes = new byte[fs.Length]; 
fs.Read(fileBytes, 0, fileBytes.Length); 

byte[] hash = md5.ComputeHash(fileBytes); 

StringBuilder localFile = new StringBuilder(); 
for (int i = 0; i < hash.Length; i++) 
{ 
    onlineFile.Append(hash[i].ToString("X2")); 
} 


if(localFile.ToString() == onlineFile.ToString()) 
{ 
    // Match 
} 
+0

StreamReaders、StreamWritersはStreamから継承しません。 –

関連する問題