ตรวจชื่อไฟล์ในตาราง access กับใน folder ถ้าไม่มีชื่อนั้นในตาราง access ให้ลบ file นั้นที่อยู่ใน folder ทิ้งไป
หลักการง่าย ๆ น่ะครับ ก็คือเปิด Database แล้วก็ วนลูปพร้อมๆ กับไปเชคใน โฟเดอร์ ไฟล์ตัวไหนมีก็ให้ Move ไปยังอีก Folder หนึ่งก่อนครับ จากนั้นก็ลบตัวที่ไม่ได้ใช้ออก แล้วค่อย Move กลับมายัง Folder เดิมครับ
ASP.NET File/Folder Object
ประวัติการแก้ไข 2010-11-20 08:12:09
Date :
2010-11-19 06:41:42
By :
webmaster
กรณีไม่ถนัดเขียนโปรแกรม หรือไม่อยากเขียน (เพราะเห็นถามหา script) ลองวิธีนี้ดูครับ ใช้หลักการเดียวกับของ Mr.Win
ตามนี้ครับ (เนื่องจากไม่ได้บอกว่่าที่เก็บในตารางเป็นชื่อไฟล์อย่างเดียว หรือชื่อไฟล์พร้อม path เช่น c:\temp\data1.txt ผมเลยเข้าใจเองว่าเก็บเฉพาะชื่อไฟล์นะครับ)
1. export ชื่อไฟล์จากใน table ออกมาให้หมดเป็น text file นะครับ
2. สร้าง folder ใหม่ ขึ้นมาแล้ว copy file จาก folder ที่ใช้งานอยู่จริงไปให้หมด เพื่อ backup ไว้ก่อน (ในตัวอย่างผมสร้างไว้ชื่อ D:\TEMP)
3. เปิด text file จากข้อ 1 มาแล้วลบสิ่งที่ไม่เกี่ยวออกให้หมด ให้เหลือเฉพาะชือไฟล์อย่างเดียว
ให้เหลือเป็นแบบนี้ครับ แสดงข้อมูลใน text file หลังจากที่ลบสิ่งที่ไม่ต้องการออกแล้ว
4. ใช้ editor อย่าง Notepad++ , EditPlus, UltraEdit หรือตัวใดก็ได้ที่สามารถพิมพ์แบบ column mode ได้ ใช้คุณสมบัตินั้นในการ copy และ paste แบบ column หมด เพื่อ copy ชื่อไฟล์ออกมาอีกชุด
ตัวอย่างใช้โปรแกรม Notepad++ ทำครับ
รูปแสดงการ hi-light แบบ column mode และ copy
หลังจาก paste แล้ว
5. พิมพ์คำสั่งเพิ่มจากข้างหน้าเข้าไปก่อนตามรูปครับ
ให้พิมพ์เพิิ่่มว่า IF EXIST D:\TEMP\
โดยที่ D:\TEMP\ เป็น path ที่เราสร้างใหม่และ copy ข้อมูลมาแล้วจากในข้อ 2 นะครับ
6. สร้าง folder ใหม่อีก folder นึงไว้เก็บเฉพาะำไฟล์ที่จะต้องใช้จริง (ในตัวอย่างสร้างไว้ชื่อ D:\FILE_USING) แล้วเพิ่ม script ต่อจากข้อ 4 ตามนี้ครับ โดยพิมพ์เพิ่มไปจากชื่อไฟล์ที่เรา copy มาแล้วอีกชุดนึงครับ
MOVE D:\TEMP\
7. ใส่ปลายทางของคำสั่ง move ของข้อ 6 ไปที่ folder ที่สร้างมาใหม่ครับ
D:\FILE_USING\
8. เป็นอันเสร็จการทำ script ครับ ทีนี้ให้ save ไฟล์ได้เลย หลังจาก save แล้วให้ rename นามสกุลไฟล์จากเดิม txt เป็น bat ครับ
9. double click ที่ batch file ที่เราสร้างเสร็จแล้วเพื่อให้มันทำงานให้ครับ
10. หลังจากที่มันคัดแยกไฟล์ให้แล้ว ทีนี้ก็แล้วแต่ล่ะครับว่าจะทำยังไงกับไฟล์ที่ได้ ลบไฟล์ทั้งหมดจากที่เก่า แล้ว copy file จาก folder file_using ไปวางแทนก็ได้ หรือจะง่ายกว่านั้น ก็ใช้วิธี rename folder เอาก็ได้ครับ
ปล. ถ้าใช้วิธี rename folder แล้ว app เป็น web app ให้ระวังเรื่อง permission ด้วยนะครับ
เป็นอันเสร็จครับ ลองทำดูครับ เหมือนขั้นตอนจะเยอะ แต่ถ้าลองทำดูแล้วจะเห็นว่าแป๊ปเดียวเสร็จครับ ผมเขียนขั้นตอนเยอะเพื่อให้เข้าใจง่ายสุดครับ
ประวัติการแก้ไข 2010-11-19 10:55:08
Date :
2010-11-19 10:53:38
By :
salapao_codeman
ตอบความคิดเห็นที่ : 1 เขียนโดย : webmaster เมื่อวันที่ 2010-11-19 06:41:42
รายละเอียดของการตอบ ::
ผมกำลังหัดเขียนครับ ทั้ง asp และ asp.net ตอนนี้ผมลองเขียนโดยใช้ asp ก้อยังไม่ได้เช่นกัน รบกวนดูให้ด้วยครับ
Code
<% Option Explicit %>
<html>
<head>
<title>ทดสอบ</title>
</head>
<body>
<%
Dim Conn,strSQL,objRec,arrData,i
Set Conn = Server.Createobject("ADODB.Connection")
Conn.Open "DRIVER=Microsoft Access Driver (*.mdb);DBQ=" & Server.MapPath("MyDb.mdb"),"" , ""
strSQL = "SELECT * FROM Table1 "
Set objRec = Conn.Execute(strSQL)
arrData = objRec.GetRows()
objRec.Close()
Conn.Close()
Set objRec = Nothing
Set Conn = Nothing
'*** arrData(Field,Rows) ***'
%>
<table width="600" border="1">
<tr>
<th width="91"> <div align="center">ID </div></th>
<th width="71"> <div align="center">File </div></th>
</tr>
<%
For i = 0 To Ubound(arrData,2)
%>
<tr>
<td><div align="center"><%=arrData(0,i)%></div></td>
<td align="right"><%=arrData(11,i)%></td>
</tr>
<%
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
IF objFSO.FileExists(Server.MapPath("uploads/") & arrData(11,i)) Then
Response.write("มีไฟล์") 'ตรงนี้เมื่อตรวจพบไฟล์แล้วผมจะค่อยย้ายไฟล์ไปเก็บไว้
Else
Response.write("ไม่มีไฟล์") 'แต่พอรันโค๊ดปรากฎว่า จะขึ้นไม่มีไฟล์ตลอด
End IF
Set objFSO = Nothing
%>
<%
Next
%>
</table>
</body>
</html>
Date :
2010-11-19 22:58:40
By :
raybrown
ลองตรวจสอบเรื่อง path + ชื่อไฟล์ดูหรือยังครับว่ามันแสดงออกมาถูกต้อง ตาม path จริงที่อยู่บน server น่ะครับ
ลองเปลี่ยนตรงนี้ดูครับ ดูว่ามันแสดง path ออกมาถูกต้องหรือเปล่า ถ้ามันออกมาถูกต้องแล้วที่ดัก if ไว้ควรจะใช้ได้นะครับ
Code ASP
<%
For i = 0 To Ubound(arrData,2)
%>
<tr>
<td><div align="center"><%=arrData(0,i)%></div></td>
<td align="right"><%=arrData(11,i)%></td>
</tr>
<%
response.write(Server.MapPath("uploads/") & arrData(11,i)+"</ br>") Then
Next
%>
Date :
2010-11-20 04:42:31
By :
salapao_codeman
Load balance : Server 01