研究了好久,才做成,以此做个日志。
一共两种方法
///
/// 连接共享文件
///
/// 共享文件地址
/// 用户名
/// 密码
/// true:连接成功 false:连接失败
public bool ConnectState(string path, string userName, string passWord, int islog)
{
bool Flag = false;
Process proc = new Process();
try
{
proc.StartInfo.FileName = "cmd.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.CreateNoWindow = true;
proc.Start();
//登录验证
string dosLine = @"net use \\192.168.1.205\ipc$ 12345/user:ftpuser";
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (!proc.HasExited)
{
proc.WaitForExit(1000);
}
string errormsg = proc.StandardError.ReadToEnd();
proc.StandardError.Close();
if (string.IsNullOrEmpty(errormsg))
{
Flag = true;
}
else
{
if (islog > 0)
com.log("ConnectState", "连接共享文件信息:" + errormsg);
throw new Exception(errormsg);
}
}
catch (Exception ex)
{
if (islog > 0)
com.log("ConnectState", "连接共享文件出错:" + ex.Message);
//throw ex;
Flag = false;
}
finally
{
proc.Close();
proc.Dispose();
}
return Flag;
}
///
/// 上传文件到共享文件夹
///
/// 本地文件
/// 远程文件
public bool UpLoadFile(string sourceFile, string remoteFile, int islog)
{
//判断文件夹是否存在 ->不存在则创建
var targetFolder = Path.GetDirectoryName(remoteFile);
DirectoryInfo theFolder = new DirectoryInfo(targetFolder);
if (theFolder.Exists == false)
{
theFolder.Create();
}
var flag = true;
try
{
WebClient myWebClient = new WebClient();
NetworkCredential cread = new NetworkCredential();
myWebClient.Credentials = cread;
using (FileStream fs = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
{
using (BinaryReader r = new BinaryReader(fs))
{
byte[] postArray = r.ReadBytes((int)fs.Length);
using (Stream postStream = myWebClient.OpenWrite(remoteFile))
{
if (postStream.CanWrite == false)
{
//LogUtil.Error($"{remoteFile} 文件不允许写入~");
if (islog > 0)
com.log("UpLoadFile", remoteFile + " 文件不允许写入~");
flag= false;
}
postStream.Write(postArray, 0, postArray.Length);
}
}
}
return flag;
}
catch (Exception ex)
{
// string errMsg = $"{remoteFile} ex:{ex.ToString()}";
//LogUtil.Error(errMsg);
//Console.WriteLine(ex.Message);
if (islog > 0)
com.log("UpLoadFile", "上传文件到共享文件夹:" + ex.Message);
return false;
}
}
使用这个方法之前,先打开cmd窗口,用dos命令运行是否正常
命令:打开连接:net use \\IP地址\ipc$ 密码/user:用户名 注意:只有三个空格
删除连接:net use \\IP地址\ipc$ 密码/user:用户名\del
net use错误解决方案:
1.错误号5,拒绝访问:很可能你使用的用户不是管理员权限的,先提升权限;
2.错误号51,Windows无法找到网络路径:网络有问题;
3.错误号53,找不到网络路径:ip地址错误;目标未开机;目标lanmanserver服务未启动;目标有防火墙(端口过滤);
4.错误号67,找不到网络名:你的lanmanworkstation服务未启动或者目标删除了ipc$;
5.错误号1219,提供的凭据与已存在的凭据集冲突:你已经和对方建立了一个ipc$,请删除再连;
6.错误号1326,未知的用户名或错误密码:原因很明显了;
WinXP:控制面板-〉文件夹选项-〉察看-〉简单的文件共享去掉选取。然后再尝试连接。果真是这个“简单文件共享”搞的鬼,把它取消就可以了。简单文件共享会把网络连接权限都归为 guest连接,是无法访问C$等管理共享的
win2003:运行->输入secpol.msc,打开本地安全设置->本地策略->安全选项->选择"网络安全:LAN管理器身份验证级别"的属性修改为“发送LM和NTLM响应”即可~
WIN7:是安全设置有一项要设置!本地安全策略-本地策略-安全选项-网络安全:LAN管理器身份验证级别,默认是“没有定义”,更改为“发送LM和NTLM响应!
重启组策略:cmd:gpupdate
7.错误号1792,试图登录,但是网络登录服务没有启动:目标NetLogon服务未启动;
8.错误号2242,此用户的密码已经过期:目标有帐号策略,强制定期要求更改密码.
///
/// 上传文件:要设置共享文件夹是否有创建的权限,否则无法上传文件
///
/// 本地文件路径
/// 共享文件夹地址
///
///
///
///
public bool UpLoadFile2(string fileNamePath, string urlPath, string User, string Pwd, int islog)
{
var flag = false;
string newFileName = fileNamePath.Substring(fileNamePath.LastIndexOf(@"\") + 1);//取文件名称
//MessageBox.Show(newFileName);
if (urlPath.EndsWith(@"\") == false) urlPath = urlPath + @"\";
urlPath = urlPath + newFileName;
WebClient myWebClient = new WebClient();
NetworkCredential cread = new NetworkCredential(User, Pwd, "Domain");
myWebClient.Credentials = cread;
FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
Stream postStream =null;
try
{
byte[] postArray = r.ReadBytes((int)fs.Length);
postStream = myWebClient.OpenWrite(urlPath);
// postStream.m
if (postStream.CanWrite)
{
postStream.Write(postArray, 0, postArray.Length);
//MessageBox.Show("文件上传成功!", "提醒", MessageBoxButtons.OK, MessageBoxIcon.Information);
flag= true;
}
else
{
//MessageBox.Show("文件上传错误!", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
flag= false;
}
postStream.Close();
return flag;
}
catch (Exception ex)
{
//MessageBox.Show(ex.Message, "错误");
if (islog > 0)
com.log("UpLoadFile", "上传文件到共享文件夹:" + ex.Message);
if (postStream != null)
postStream.Close();
return false;
}
}
一开始直接打开文档窗口,输入共享文件地址访问是没有问题的,代码连接却总是报错,估计跟Guest被禁止的原因