/// <summary> /// Gets details of all files and their available FTP file information from the current working FTP directory that match the file mask. /// </summary> /// <param name="mask">A <see cref="String"/> representing the file mask to match files.</param> /// <returns>A <see cref="FtpFileInfo[]"/> representing the files in the current working directory.</returns> public FtpFileInfo[] GetFiles(string mask) { WINAPI.WIN32_FIND_DATA findData = new WINAPI.WIN32_FIND_DATA(); IntPtr hFindFile = WININET.FtpFindFirstFile( _hConnect, mask, ref findData, WININET.INTERNET_FLAG_NO_CACHE_WRITE, IntPtr.Zero); try { List <FtpFileInfo> files = new List <FtpFileInfo>(); if (hFindFile == IntPtr.Zero) { if (Marshal.GetLastWin32Error() == WINAPI.ERROR_NO_MORE_FILES) { return(files.ToArray()); } else { Error(); return(files.ToArray()); } } if ((findData.dfFileAttributes & WINAPI.FILE_ATTRIBUTE_DIRECTORY) != WINAPI.FILE_ATTRIBUTE_DIRECTORY) { FtpFileInfo file = new FtpFileInfo(this, new string(findData.fileName).TrimEnd('\0')) { LastAccessTime = findData.ftLastAccessTime.ToDateTime(), LastWriteTime = findData.ftLastWriteTime.ToDateTime(), CreationTime = findData.ftCreationTime.ToDateTime(), Attributes = (FileAttributes)findData.dfFileAttributes }; files.Add(file); } findData = new WINAPI.WIN32_FIND_DATA(); while (WININET.InternetFindNextFile(hFindFile, ref findData) != 0) { if ((findData.dfFileAttributes & WINAPI.FILE_ATTRIBUTE_DIRECTORY) != WINAPI.FILE_ATTRIBUTE_DIRECTORY) { FtpFileInfo file = new FtpFileInfo(this, new string(findData.fileName).TrimEnd('\0')) { LastAccessTime = findData.ftLastAccessTime.ToDateTime(), LastWriteTime = findData.ftLastWriteTime.ToDateTime(), CreationTime = findData.ftCreationTime.ToDateTime(), Attributes = (FileAttributes)findData.dfFileAttributes }; files.Add(file); } findData = new WINAPI.WIN32_FIND_DATA(); } if (Marshal.GetLastWin32Error() != WINAPI.ERROR_NO_MORE_FILES) { Error(); } return(files.ToArray()); } finally { if (hFindFile != IntPtr.Zero) { WININET.InternetCloseHandle(hFindFile); } } }
public FtpFileInfo[] GetFiles(string mask) { FtpFileInfo[] infoArray; WINAPI.WIN32_FIND_DATA findFileData = new WINAPI.WIN32_FIND_DATA(); IntPtr hInternet = WININET.FtpFindFirstFile(_hConnect, mask, ref findFileData, 0x400_0000, IntPtr.Zero); try { List <FtpFileInfo> list = new List <FtpFileInfo>(); if (hInternet == IntPtr.Zero) { if (Marshal.GetLastWin32Error() == 0x12) { infoArray = list.ToArray(); } else { Error(); infoArray = list.ToArray(); } } else { if ((findFileData.dfFileAttributes & 0x10) != 0x10) { FtpFileInfo item = new FtpFileInfo(this, new string(findFileData.fileName).TrimEnd(new char[1])) { LastAccessTime = findFileData.ftLastAccessTime.ToDateTime(), LastWriteTime = findFileData.ftLastWriteTime.ToDateTime(), CreationTime = findFileData.ftCreationTime.ToDateTime(), Attributes = (FileAttributes)findFileData.dfFileAttributes }; list.Add(item); } findFileData = new WINAPI.WIN32_FIND_DATA(); while (true) { if (WININET.InternetFindNextFile(hInternet, ref findFileData) == 0) { if (Marshal.GetLastWin32Error() != 0x12) { Error(); } infoArray = list.ToArray(); break; } if ((findFileData.dfFileAttributes & 0x10) != 0x10) { FtpFileInfo item = new FtpFileInfo(this, new string(findFileData.fileName).TrimEnd(new char[1])) { LastAccessTime = findFileData.ftLastAccessTime.ToDateTime(), LastWriteTime = findFileData.ftLastWriteTime.ToDateTime(), CreationTime = findFileData.ftCreationTime.ToDateTime(), Attributes = (FileAttributes)findFileData.dfFileAttributes }; list.Add(item); } findFileData = new WINAPI.WIN32_FIND_DATA(); } } } finally { if (hInternet != IntPtr.Zero) { WININET.InternetCloseHandle(hInternet); } } return(infoArray); }