请问如何远程读写文件,涉及哪些类和函数?请指点 请问如何远程读写文件,涉及哪些类和函数?请指点 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就用API的CreateFile,WriteFile等函数只要文件名带网络路径,windows会帮你定向的。 难道100分的问题就die在这里了吗?大家帮帮忙啊我查过msdn ,createfile不能够生成或打开一个远程文件,我想通过一个临时文件,将远程文件读过来在本地进行修改,这样就简单多了可是如何将文件的内容以视图的形式反映出来呢?这样只需在视图上修改,文件内容就可以改了请指教 远程计算机如果提供FTP服务,这个问题可以解决,使用类库或者SDK编程都可以写,我曾经写过类似的程序,如果想要,给我发短信息 to mfc168:我需要手动编写远程计算机的服务,而且读写的文件位置是固定的,所以不一定要求开FTP服务如果能有类似的程序最好了 ,先谢谢了^_^ 我明白你的意思了,这个需要远程线程控制,我这里有类似代码,你可以修改一下,然后建立远程线程,用该线程实现文件的读写操作,代码如下(你需要修改,我没有时间改写):void EnableDebugPriv();CString pszLibFileName;//存放待隐藏的DLL文件名HANDLE hProcessSnap=NULL;//进程快照句柄HANDLE hRemoteProcess;//远程进程句柄LPVOID pszLibFileRemote;//远程进程中分配给文件名的空间HMODULE phmd;//存放kernel32.dll句柄HANDLE hRemoteThread1=NULL;//存放远程线程句柄#include <tlhelp32.h>//void CMainFrame::OnInsert() { EnableDebugPriv(); PROCESSENTRY32 pe32={0}; DWORD dwRemoteProcessId; hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //打开进程快照 if(hProcessSnap==(HANDLE)-1) { MessageBox("CreateToolhelp32Snapshot failed","",MB_OK); } //失败返回 pe32.dwSize=sizeof(PROCESSENTRY32); if(Process32First(hProcessSnap,&pe32)) //获取第一个进程 { do{ CString te; te=pe32.szExeFile; if(te.CompareNoCase("explorer.exe")==0) { dwRemoteProcessId=pe32.th32ProcessID; break; } } while(Process32Next(hProcessSnap,&pe32));//获取下一个进程 } else { MessageBox("取第一个进程失败","",MB_OK); return; } hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwRemoteProcessId); //打开远程进程 char* pszLibFileName; CString m_path="E:\\LastFinal\\rj\\Slave\\Release\\Slave.dll"; pszLibFileName=new char[m_path.GetLength()]; sprintf(pszLibFileName,m_path);// 待隐藏的进程 int cb=(m_path.GetLength())*sizeof(char)*2;//计算dll文件名长度 pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb, MEM_COMMIT,PAGE_READWRITE); VirtualFreeEx(hRemoteProcess,pszLibFileRemote,cb,MEM_RELEASE); //申请存放文件名的空间 BOOL ReturnCode=WriteProcessMemory(hRemoteProcess, pszLibFileRemote,(LPVOID)pszLibFileName,cb,NULL); //把dll文件名写入申请的空间 phmd=GetModuleHandle("kernel32.dll"); LPTHREAD_START_ROUTINE fnStartAddr=(LPTHREAD_START_ROUTINE) GetProcAddress(phmd,"LoadLibraryA"); //获取动态链接库函数地址 hRemoteThread1=CreateRemoteThread(hRemoteProcess, NULL,0,fnStartAddr,pszLibFileRemote,0,NULL); //创建远程线程 if(hRemoteThread1!=NULL) CloseHandle(hRemoteThread1);//关闭远程线程 if(hProcessSnap!=NULL) CloseHandle(hProcessSnap);//关闭进程快照 }//提升权限void EnableDebugPriv( void ){ HANDLE hToken; LUID sedebugnameValue; TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) ) { AfxMessageBox("openprocesstoken"); return; } if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){ CloseHandle( hToken ); { AfxMessageBox("close handle"); return; } } tkp.PrivilegeCount = 1; tkp.Privileges[0].Luid = sedebugnameValue; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) ) { CloseHandle( hToken ); }} VS2010 VC/MFC :“HWND”类型的实参与“SOCKET”类型的形参不兼容 Webbroswer或者DLG中嵌入的View(继承CHtmlView)显示网页内容部分白屏????? 写进串口的数据和原数据不一样 一个关于listcontrol插入的问题 Tab 无法聚焦ActiveX控件 如何手动弹出系统菜单? 最小化问题。 能不能让程序自动注册一个odbc的数据源 [请教]我想定义一个类描述树形结构,该怎样做? 请问VC有像VB中一样的数据库表格嘛? 一个简单问题,如何将Cstring 转化为 int ,唉弱! 如何编一个与微软记事本一样的东西?
只要文件名带网络路径,windows会帮你定向的。
我查过msdn ,createfile不能够生成或打开一个远程文件,
我想通过一个临时文件,将远程文件读过来
在本地进行修改,这样就简单多了
可是如何将文件的内容以视图的形式反映出来呢?
这样只需在视图上修改,文件内容就可以改了
请指教
我需要手动编写远程计算机的服务,而且读写的文件位置是固定的,所以不一定要求开FTP服务
如果能有类似的程序最好了 ,先谢谢了^_^
void EnableDebugPriv();
CString pszLibFileName;//存放待隐藏的DLL文件名
HANDLE hProcessSnap=NULL;//进程快照句柄
HANDLE hRemoteProcess;//远程进程句柄
LPVOID pszLibFileRemote;//远程进程中分配给文件名的空间
HMODULE phmd;//存放kernel32.dll句柄
HANDLE hRemoteThread1=NULL;//存放远程线程句柄
#include <tlhelp32.h>//void CMainFrame::OnInsert()
{
EnableDebugPriv();
PROCESSENTRY32 pe32={0};
DWORD dwRemoteProcessId;
hProcessSnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
//打开进程快照
if(hProcessSnap==(HANDLE)-1)
{
MessageBox("CreateToolhelp32Snapshot failed","",MB_OK);
} //失败返回 pe32.dwSize=sizeof(PROCESSENTRY32);
if(Process32First(hProcessSnap,&pe32)) //获取第一个进程
{
do{
CString te;
te=pe32.szExeFile;
if(te.CompareNoCase("explorer.exe")==0)
{
dwRemoteProcessId=pe32.th32ProcessID;
break;
}
}
while(Process32Next(hProcessSnap,&pe32));//获取下一个进程
}
else
{
MessageBox("取第一个进程失败","",MB_OK);
return;
} hRemoteProcess=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,FALSE,dwRemoteProcessId);
//打开远程进程
char* pszLibFileName;
CString m_path="E:\\LastFinal\\rj\\Slave\\Release\\Slave.dll";
pszLibFileName=new char[m_path.GetLength()];
sprintf(pszLibFileName,m_path);// 待隐藏的进程
int cb=(m_path.GetLength())*sizeof(char)*2;//计算dll文件名长度
pszLibFileRemote=(PWSTR)VirtualAllocEx(hRemoteProcess,NULL,cb,
MEM_COMMIT,PAGE_READWRITE);
VirtualFreeEx(hRemoteProcess,pszLibFileRemote,cb,MEM_RELEASE);
//申请存放文件名的空间
BOOL ReturnCode=WriteProcessMemory(hRemoteProcess,
pszLibFileRemote,(LPVOID)pszLibFileName,cb,NULL);
//把dll文件名写入申请的空间
phmd=GetModuleHandle("kernel32.dll");
LPTHREAD_START_ROUTINE fnStartAddr=(LPTHREAD_START_ROUTINE)
GetProcAddress(phmd,"LoadLibraryA");
//获取动态链接库函数地址
hRemoteThread1=CreateRemoteThread(hRemoteProcess,
NULL,0,fnStartAddr,pszLibFileRemote,0,NULL);
//创建远程线程
if(hRemoteThread1!=NULL)
CloseHandle(hRemoteThread1);//关闭远程线程 if(hProcessSnap!=NULL)
CloseHandle(hProcessSnap);//关闭进程快照 }
//提升权限
void EnableDebugPriv( void )
{
HANDLE hToken;
LUID sedebugnameValue;
TOKEN_PRIVILEGES tkp; if ( ! OpenProcessToken( GetCurrentProcess(),
TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken ) )
{
AfxMessageBox("openprocesstoken");
return;
}
if ( ! LookupPrivilegeValue( NULL, SE_DEBUG_NAME, &sedebugnameValue ) ){
CloseHandle( hToken );
{
AfxMessageBox("close handle");
return;
}
}
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Luid = sedebugnameValue;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if ( ! AdjustTokenPrivileges( hToken, FALSE, &tkp, sizeof tkp, NULL, NULL ) )
{
CloseHandle( hToken );
}
}