MFC 读取http文件服务器上的文件列表,并选择文件进行下载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC 读取http文件服务器上的文件列表,并选择文件进行下载相关的知识,希望对你有一定的参考价值。

例如:我的虚拟文件服务器URL为:http://localhost:88,要实现类似图中选择下载补丁的功能:
1、如何编写代码实现读取服务器上的文件列表;
2、将列表显示到Dialog上的某个控件中(该用什么控件,listcontrol吗?);
3、列表里的文件如何下载?(在个文件后面加入下载控件?)。

参考技术A 你需要学会动态网页制作,至少简单的生成TXT文本,就是网站WEB程序读取目录中的文件列表,以TXT或XML输出
你还需要学会MFC网络编程,就是MFC程序访问/下载某个网址的网页,其实就是读取/下载网站WEB程序动态生成的TXT或者XML内容
当然你也可以静态生成TXT或者XML放置在WEB服务器上
显示的话,就是ListControl,ListView一类,可自绘
下载文件和下载/读取网页基本相同,只是网页是文本是string(当然原始也是BYTE[]),而文件就是很多个字节是BYTE[]

总结的话,就是一个是服务器端要放置有提供文件列表内容的文件
再一个就是MFC网络访问/读取这个文件,解析得到文件列表
学会使用ListControl
和读取网页一样,按字节接收即可本回答被提问者采纳

怎么读取列表控件中的数据

在列表空间中输入一些数据,保存成二进制文件。重新运行程序,读取上次保存的数据并在列表框中显示,保存和读取程序该怎么写?

下面的代码示例演示如何从文件中读取二进制数据。使用了 System.IO 命名空间中的两个类:FileStream 和 BinaryReader。FileStream 表示实际的文件。BinaryReader 为允许二进制访问的流提供接口。

下面的代码示例使用由如何:编写二进制文件中的代码创建的称为 data.bin 的文件。
示例

// binary_read.cpp
// compile with: /clr
#using<system.dll>
using namespace System;
using namespace System::IO;

int main()

String^ fileName = "data.bin";
try

FileStream^ fs = gcnew FileStream(fileName, FileMode::Open);
BinaryReader^ br = gcnew BinaryReader(fs);

Console::WriteLine("contents of 0:", fileName);
while (br->BaseStream->Position < br->BaseStream->Length)
Console::WriteLine(br->ReadInt32().ToString());

fs->Close( );

catch (Exception^ e)

if (dynamic_cast<FileNotFoundException^>(e))
Console::WriteLine("File '0' not found", fileName);
else
Console::WriteLine("Exception: (0)", e);
return -1;

return 0;


★★补充★★
手上的一个VB项目(过程中发现,.Net果然是好啊),需要在一个ActiveX中实现HTTP下载功能,我是采用InternetreadFile这个API来实现,一开始的代码我是这么写的

Function Gethttpdownload(sUrl As String) As boolen

Dim s As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim sReadBuffer As String * 2048
Dim lNumberOfBytesRead As Long
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
bDoLoop = True
Do While bDoLoop
sReadBuffer = vbNullString
bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead)
s = s & Left$(sReadBuffer, lNumberOfBytesRead)
If Not CBool(lNumberOfBytesRead) Then bDoLoop = False
Loop
FileName = "E:\BitSpirit\Torrent\121212.torrent"
F1 = FreeFile
Open FileName For Binary As F1
Put F1, , s
Close F1
If hOpen <> 0 Then InternetCloseHandle (hOpen)
Gethttpdownload = true
End Function

或者//读串口函数如下
void com::readEasyCom()
int i;
QByteArray temp= easyCom->readAll();
i=temp.size();
QString num=QString::number(i);
//读取串口缓冲区的所有数据给临时变量temp
ui->receiveNumEdit->setText(num);
ui->textBrowser->insertPlainText(temp.toHex());
//将串口的数据显示在窗口的文本浏览器中


程序能正常收到串口数据,并在textBrowser中显示,但是receiveNumEdit总是显示0

如何将temp中的值保存到文件中?
参考技术A m 控件

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。

语法

MSComm

说明

MSComm 控件提供下列两种处理通讯的方式:

事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。

在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
每个使用的 MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。可以在 Windows“控制面板”中改变端口地址和中断地址。

尽管 MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。

属性 描述
CommPort 设置并返回通讯端口号。
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。
Input 从接收缓冲区返回和删除字符。
Output 向传输缓冲区写一个字符串。

触发事件 OnComm

多看 msdn
祝你顺利

以上是关于MFC 读取http文件服务器上的文件列表,并选择文件进行下载的主要内容,如果未能解决你的问题,请参考以下文章

怎么读取列表控件中的数据

MFC CFileDialog 只打开选择文件

如何用MFC打印指定excel

MFC编程 -- 保存和读取列表框内容

mfc编程,要用户选择一个文件夹,然后返回此文件夹的路径。不是要选择文件,是要文件夹的路径。

用MFC做文件传输工具时,怎么做出选择文件的界面?