Tớ có 1 vài thắc mắc về vấn đề này, mong mọi người giải đáp:
1.
Trong đoạn code trên nếu thay TextReader ( in đậm) bằng StreamReader thì vẫn được. Vậy sự khác nhau của 2 lớp này là gì? Dùng cái nào thì tối ưu hơn?using System;
using System.IO;
namespace file
{
class Program
{
static void Main(string[] args)
{
TextWriter tw = new StreamWriter("C:/test.txt");
// write a line of text to the file
tw.WriteLine("Tell me what's forever for");
tw.WriteLine("abc123");
tw.WriteLine("123456");
// close the stream
tw.Close();
Console.ReadLine();
}
}
}
2.
Để tạo 1 file mới, có thể làm tt cách trên hoặc 1 cách nữa là:
Có phải lớp StreamReader/StreamWriter là lớp con của FileStream không nhỉ?using System;
using System.IO;
namespace file2
{
class Program
{
static void Main(string[] args)
{
FileStream fout;
// open output file
try
{
fout = new FileStream("test.txt", FileMode.Create);
}
catch(IOException exc)
{
Console.WriteLine(exc.Message);
return;
}
//Write alphabet to file
try
{
for (char c = 'A'; c <= 'Z'; c++)
fout.WriteByte((byte)c);
}
catch (IOException exc)
{
Console.WriteLine(exc.Message);
}
fout.Close();
Console.ReadLine();
}
}
}
3.
Nếu thay phương thức WriteByte ( in đậm ) bằng phương thức Write thì pt này cần có 3 tham số. Nhưng tớ không hiểu 3 tham số này là những gì? .
Pt Write khác gì so với WriteByte?
4. Nếu bỏ câu lệnh return; ( in đậm nghiêng ) ở trên thì trình biên dịch sẽ báo lỗi chưa khởi tạo biến fout. Tớ không hiểu tại sao lại thế?
Mong các cậu giúp đỡ.
Cảm ơn nhiều.
jerry,
1. TextWriter là abstract base class của StreamWriter nên dĩ nhiên đoạn code trên của cậu không sao, compiler không báo lỗi. New con gán vào cha thì được, vì 100% của cha sẽ tồn tại trong con (con chính hãng nha, không phải con hàng xóm), chứ new cha mà gán vào con thì báo lỗi đó, vì con sẽ có thêm nhiều cái khác cha (do mẹ nó dạy, thêm vào, rồi overload, overwrite cái tính xấu mà mẹ nó không ưa từ thằng cha nó.)
2. Nên đọc thật kỹ MSDN về các thắc mắc của mình, MSDN nói rõ ra rồi, đừng lười quá vậy: StreamWriter kế thừa từ abstract class TextWriter, StreamReader kế thừa từ abstract class TextReader.
MSDN:
3. Write cần 3 thông số:public ref class TextReader abstract : public MarshalByRefObject, IDisposable
public class StreamReader : TextReader
public abstract class TextWriter : MarshalByRefObject, IDisposable
public class StreamWriter : TextWriter
Còn WriteByte thì chỉ write 1 byte, thằng trên thì write 1 đống luôn, hiểu chưa vậy ???Writes a block of bytes to this stream using data from a buffer
public override void Write (
byte[] array,
int offset,
int count
)
4. Chắc chắc vậy, tui hỏi cậu, khi khai báo fout như vậy, thì fout có giá trị gì, và nếu exception throw trong câu lệnh new FileStream(xxx gì đó) thì fout có được khởi gán giá trị không.
Tự nhiên thấy bực mình, cậu này chỉ biết cắm đầu code mà không biết tự tìm hiểu, tự search.
Tui là chúa ghét C#, không biết nó 1 chữ, vậy mà chỉ cần tra MSDN là ra. ????