我承認我是這個FTP的東西很新手。我試圖從FTP站點下載文件,提取數據,然後刪除它。下面是相關的代碼(我從一些論壇的功能,但由於一直沒能找到它):VB.Net無法刪除/殺死從FTP站點下載的文件
Public Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal HINet As Integer) As Integer
Public Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Integer, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Integer) As Integer
Public Declare Function InternetConnect Lib "wininet.dll" Alias "InternetConnectA" (ByVal hInternetSession As Integer, ByVal sServerName As String, ByVal nServerPort As Integer, ByVal sUsername As String, ByVal sPassword As String, ByVal lService As Integer, ByVal lFlags As Integer, ByVal lContext As Integer) As Integer
Public Declare Function FtpGetFile Lib "wininet.dll" Alias "FtpGetFileA" (ByVal hFtpSession As Integer, ByVal lpszRemoteFile As String, ByVal lpszNewFile As String, ByVal fFailIfExists As Boolean, ByVal dwFlagsAndAttributes As Integer, ByVal dwFlags As Integer, ByVal dwContext As Integer) As Boolean
Sub Main()
INet = InternetOpen("MyFTP Control", 1, vbNullString, vbNullString, 0)
INetConn = InternetConnect(INet, "ftp.myftpsite.com", 0, "username", "password", 1, 0, 0)
FtpGetFile(INetConn, "test.csv", "C:\temp.csv", True, 1, 0, 0)
InternetCloseHandle(INetConn)
InternetCloseHandle(INet)
'do stuff with file
Kill("C:\temp.csv")
End Sub
它下載文件就好了,但我得到了下面的錯誤在kill命令:「訪問路徑'C:\ temp.csv'被拒絕。」如果我使用System.IO.File.Delete,則會出現同樣的錯誤(請參閱末尾的代碼段以瞭解異常詳細信息)。
奇怪的是,我可以手動刪除文件,沒有問題。此外,如果我複製文件,我可以殺死副本,但仍然不是原件。我不相信這是一個連接/釋放問題,因爲我也不能殺死幾天前幾天重新啓動計算機時下載的文件。我知道這不是目錄權限問題,因爲我可以手動將文件移動到桌面,但仍無法通過代碼殺死它。
我發現了幾個論壇貼子有同樣的問題,但沒有發佈答案。只是爲了澄清,我不是試圖從FTP站點刪除文件,而是從我的機器上下載文件。
我正在使用Visual Studio 2008.在此先感謝!
異常詳細信息:
System.UnauthorizedAccessException was unhandled
Message="Access to the path 'C:\temp.csv' is denied."
Source="Microsoft.VisualBasic"
StackTrace:
at Microsoft.VisualBasic.FileSystem.Kill(String PathName) at Project1.Module1.Main() at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()
InnerException:
正如錯誤消息所示,您沒有足夠的權限寫入c:\,這在現代版本的Windows中是非常正常的。嘗試在某個地方創建一個新目錄並在那裏寫入。 – dummy
我應該澄清 - 我縮短了C:\的路徑,使它更清潔。但我知道標準特權不是問題,因爲我可以殺死同一目錄中的其他(非ftp源)文件。 – Jon
你有沒有使用「嘗試抓住,最後」? http://msdn.microsoft.com/en-us/library/fk6t46tz.aspx – TheOptimusPrimus