เกี่ยวกับการใช้ using ที่ไม่ใช่ using ??

Last post 09-20-2008 19:09 by robot. 4 replies.
Page 1 of 1 (5 items)
Sort Posts: Previous Next
  • 09-18-2008 10:07

    • robot
    • Top 10 Contributor
    • Joined on 03-25-2008
    • Posts 16

    Big Smile [:D] เกี่ยวกับการใช้ using ที่ไม่ใช่ using ??

    คือผมหา code สำหรับที่จะ zip และ unzip ไฟล์ ตัวอย่างนี้มาอ่ะครับ ซึ่งใช้ได้ดีทีเดียว แต่ว่าผมมีคำถามอยากถามนะคับ ว่า การใช้ using using (ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) {...} // แบบในตัวอย่างนี้คืออะไร มีประโยชน์ยังไงอ่ะครับ เพราะถ้าผมเอาออกบางครั้งเวลา unzip ไฟล์เสร็จแล้ว จะมีบางไฟล์ที่ได้ size เป็นศูนย์มา แล้วก็ลบไฟล์ที่ unzip มาแล้วพวกนี้ไม่ได้ต้องปิดโปรแกรมก่อน เหมือนมันยังเปิดไฟล์นั้นทิ้งไว้อยู่ อะไรประมาณนั้น แต่ถ้าใส่ using แล้ว มันทำงานได้อย่างไม่มีปัญหาเลย ผมเลยอยากทราบนะครับ มันคืออะไรนะคับ ขอบคุณครับ using (ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) { ZipEntry theEntry; while ((theEntry = s.GetNextEntry()) != null) { Console.WriteLine(theEntry.Name); string directoryName = Path.GetDirectoryName(theEntry.Name); string fileName = Path.GetFileName(theEntry.Name); // create directory if ( directoryName.Length > 0 ) { Directory.CreateDirectory(directoryName); } if (fileName != String.Empty) { using (FileStream streamWriter = File.Create(theEntry.Name)) { int size = 2048; byte[ data = new byte[2048]; while (true) { size = s.Read(data, 0, data.Length); if (size > 0) { streamWriter.Write(data, 0, size); } else { break; } } } } } }
  • 09-18-2008 11:36 In reply to

    Re: เกี่ยวกับการใช้ using ที่ไม่ใช่ using ??

    dll ZipInputStream ใช้พวก class Stream ดังนั้น แนะนำว่าใช้ using เป็นดีที่สุด เพราะมันจะ open stream หรือ file ได้เฉพาะใน block using พอออกจาก block using แล้วมันจะ คืน resource ของ stream ทั้งหมด แต่ถ้าใช้ Stream stream = new Stream(); อย่างเดียวแล้ว dispose() ล่ะก็มันจะคืน resource ไม่หมดทำให้ delete file นั้นไม่ได้
  • 09-18-2008 18:23 In reply to

    • robot
    • Top 10 Contributor
    • Joined on 03-25-2008
    • Posts 16

    Re: เกี่ยวกับการใช้ using ที่ไม่ใช่ using ??

    ขอบคุณมากคับ .... เอ่อแล้วมี type ประเภทไหนบ้างคับที่ ควรจะใช้ block using นอกเหนือจาก stream
  • 09-19-2008 8:35 In reply to

    Re: เกี่ยวกับการใช้ using ที่ไม่ใช่ using ??

     ควรจะใช้กับทุกคลาสที่มัน Disposable ครับ คือมีคำสั่ง Dispose()

    คลาสพวกนี้ มันมักจะต่อ Resource ภายนอก เช่น Database, Socket ซึ่ง Garbage Collector เก็บให้เราเองไม่ได้ เราต้องเป็นคนสั่ง Dispose() การใส่มันไว้ใน Using จะทำให้เราไม่ต้องคอยกังวลว่าจะลืมเรียก Dispose เพราะ Object นั้นจะโดน Dispose เอง เมื่อออกจา Block ครับ

    นั่นก็คือ ไม่ว่ามี Exception, Return ยังไง มันก้อจะ Dispose แน่นอนครับ

  • 09-20-2008 19:09 In reply to

    • robot
    • Top 10 Contributor
    • Joined on 03-25-2008
    • Posts 16

    Re: เกี่ยวกับการใช้ using ที่ไม่ใช่ using ??

    ขอบคุณมากคับ ;)
Page 1 of 1 (5 items)