คือเรื่องของเรื่องผมอยากจะตรวจสอบว่ามีไฟล์ชื่อ test.bin ในโฟลเดอร์ system32 ในโฟลเดอร์ของ windows อ่ะครับ
ผมเลยทดลองสร้างไฟล์ test.bin ไว้ใน system32 ก่อน
แล้วผมก็ทดลองโดยใช้วิธีดังต่อไปนี้ครับ(ผมจะให้มันทำตอนที่โหลดโปรแกรมขึ้นมาเลย)
if (File.Exists(filename))
else
หรือ
FileStream fs1 = new FileStream(filename, FileMode.Open, FileAccess.Read);
แล้วดัก exception เอา
หรือ
using (StreamReader reader = new StreamReader(filename))
แล้วดัก exception เอา
ผลก็คือ ทั้งสามแบบ มันแสดงค่ามั่วๆยังไงไม่รู้อ่ะครับ ตอนแรกบอกว่ามี ผมก็เลยลองเปลี่ยนชื่อไฟล์ไปเป็นอย่างอื่น รันอีกทีดันบอกว่ามี อะไรแบบนี้อ่ะครับ
แต่ถ้าผมใช้ FileStream แล้วดัก exception เอา เพื่อตรวจสอบไฟล์ที่รูทที่ไดร์ฟc ผลก็เป็นไปตามความจริงอ่ะครับ เปลี่ยนชื่อมันก็บอกว่าไม่มี เปลี่ยนชื่อเป็นอันเดิมมันก็บอกว่ามี
ผมเลยสงสัยครับว่า ผมพลาดอะไรจุดไหนไปหรือเปล่าครับ ผมถึงตรวจสอบไฟล์ใน system32 แล้วมันได้ผลการพบที่มั่วๆอ่ะครับ..
ลองใช้ FileInfo แทนครับ
Architec Tue, 10/07/2012 - 11:00
ลองใช้ FileInfo แทนครับ (ไม่เคยทำใน x86 นะ เคยทำแต่ใน ARM น่าจะได้ผลเหมือนกัน)
http://stackoverflow.com/questions/1388686/c-sharp-list-file-in-directory-issue
อันนั้นผมก็ลองใช้ดูแล้วครับ
livebox Tue, 10/07/2012 - 13:15
In reply to ลองใช้ FileInfo แทนครับ by Architec
อันนั้นผมก็ลองใช้ดูแล้วครับ มันก็ยังได้ผลไม่ถูกต้องอยู่อ่ะครับ ยกเว้นไปตรวจสอบไฟล์ที่อยู่ที่รูทของไดร์ฟ c อะไรแบบนี้อ่ะครับ มันถึงจะแสดงผลถูกต้องตามความจริง..
แล้วมีไฟล์ชื่อ test.bin
soginal Tue, 10/07/2012 - 17:54
แล้วมีไฟล์ชื่อ test.bin อยู่ใน folder อื่นอีกหรือเปล่าครับ
ลองใช้ File.Exists กับไฟล์ชื่ออื่นรึยังครับ
แล้ว window ที่ใช้ เป็น window 64 bit หรือ 32 bit ครับ
เพราะบน window 64 bit เมื่อรันโปรแกรมแบบ 32 bit และโปรแกรมมีการ access โฟเดอร์ system32 ตัว window จะ redirect ไปยังโฟเดอร์ SysWOW64 (ที่ใช้เก็บ dll แบบ 32 bit - -! ) ก่อนที่จะไปยังโฟเดอร์ system32 (ซึ่งเก็บ dll 64 bit)
ตรง filename
aez Wed, 11/07/2012 - 14:15
ตรง filename ใส่ค่าอะไรไว้ครับ
var filename = @"c:\windows\system32\test.bin";
หรือเปล่าครับ