类库:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ShareFile
{
class ShareLib
{
public static string Sharefile_Error = "";
public static bool connectState(string path)
{
return connectState(path, "", "");
}
/// <summary>
/// 连接远程共享文件夹
/// </summary>
/// <param name="path">远程共享文件夹的路径</param>
/// <param name="userName">用户名</param>
/// <param name="passWord">密码</param>
public static bool connectState(string path, string userName, string passWord)
{
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 " + path + " " + passWord + " /user:" + userName;
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
{
Sharefile_Error = errormsg;
}
}
catch (Exception ex)
{
Sharefile_Error = ex.Message;
}
finally
{
proc.Close();
proc.Dispose();
}
return Flag;
}
/// <summary>
/// 从远程服务器下载文件到本地
/// </summary>
/// <param name="SourceFile">远程服务器路径(共享文件夹路径)</param>
/// <param name="LocalFile">下载到本地后的文件路径</param>
/// <param name="LocalFileName">下载到本地文件名称,包含扩展名:ABC.text</param>
public static bool TransportRemoteToLocal(string SourceFile, string LocalFile, string LocalFileName)
{
bool rel = false;
try
{
//远程服务器文件 此处假定远程服务器共享文件夹下确实包含本文件,否则程序报错
FileStream inFileStream = new FileStream(SourceFile, FileMode.Open);
if (!Directory.Exists(LocalFile))
{
Directory.CreateDirectory(LocalFile);
}
//从远程服务器下载到本地的文件
if (!LocalFile.EndsWith(@"\"))
{
LocalFile = LocalFile + LocalFileName;
}
else
{
LocalFile = LocalFile + "\\" + LocalFileName;
}
FileStream outFileStream = new FileStream(LocalFile + LocalFileName, FileMode.OpenOrCreate);
byte[] buf = new byte[inFileStream.Length];
int byteCount;
while ((byteCount = inFileStream.Read(buf, 0, buf.Length)) > 0)
{
outFileStream.Write(buf, 0, byteCount);
}
inFileStream.Flush();
inFileStream.Close();
outFileStream.Flush();
outFileStream.Close();
rel = true;
}
catch (Exception ex)
{
Sharefile_Error = ex.Message;
}
return rel;
}
/// <summary>
/// 将本地文件上传到远程服务器共享目录
/// </summary>
/// <param name="SourceFile">本地文件的绝对路径,包含扩展名</param>
/// <param name="RemoteFile">远程服务器共享文件路径,不包含文件扩展名</param>
/// <param name="RemoteFileName">上传到远程服务器后的文件扩展名</param>
public static bool TransportLocalToRemote(string SourceFile, string RemoteFile, string RemoteFileName) //src
{
//string SourceFile, string LocalFile, string LocalFileName
bool rel = false;
try
{
FileStream inFileStream = new FileStream(SourceFile, FileMode.Open); //此处假定本地文件存在,不然程序会报错
if (!Directory.Exists(RemoteFile)) //判断上传到的远程服务器路径是否存在
{
Directory.CreateDirectory(RemoteFile);
}
//上传到远程服务器共享文件夹后文件的绝对路径
if (!RemoteFile.EndsWith(@"\"))
{
RemoteFile = RemoteFile + RemoteFileName;
}
else
{
RemoteFile = RemoteFile + "\\" + RemoteFileName;
}
FileStream outFileStream = new FileStream(RemoteFile, FileMode.OpenOrCreate);
byte[] buf = new byte[inFileStream.Length];
int byteCount;
while ((byteCount = inFileStream.Read(buf, 0, buf.Length)) > 0)
{
outFileStream.Write(buf, 0, byteCount);
}
inFileStream.Flush();
inFileStream.Close();
outFileStream.Flush();
outFileStream.Close();
rel = true;
}
catch (Exception ex)
{
Sharefile_Error = ex.Message;
}
return rel;
}
/// <summary>
/// 模糊搜索文件:远程与本地通用
/// </summary>
/// <param name="SourceFile">远程路径</param>
/// <param name="kzm">所有文件: * ;指定格式文件:.txt</param>
public static List<Fileinfo_share> GetAllFiles(string SourceFile, string kzm)
{
List<Fileinfo_share> listFiles = new List<Fileinfo_share>();
try
{
//根目录下的文件
DirectoryInfo dir = new DirectoryInfo(SourceFile);
foreach (var file in dir.GetFiles())
{
if (kzm == "*")
{
Fileinfo_share fi = new Fileinfo_share();
fi.FullName = file.FullName;
fi.filename = file.Name;
listFiles.Add(fi);
}
else if (file.Extension == kzm)
{
Fileinfo_share fi = new Fileinfo_share();
fi.FullName = file.FullName;
fi.filename = file.Name;
listFiles.Add(fi);
}
}
//二级目录下的文件
DirectoryInfo[] fileInfo = dir.GetDirectories();
foreach (DirectoryInfo item in fileInfo)
{
foreach (var file in item.GetFiles())
{
if (kzm == "*")
{
Fileinfo_share fi = new Fileinfo_share();
fi.FullName = file.FullName;
fi.filename = file.Name;
listFiles.Add(fi);
}
else if (file.Extension == kzm)
{
Fileinfo_share fi = new Fileinfo_share();
fi.FullName = file.FullName;
fi.filename = file.Name;
listFiles.Add(fi);
}
}
}
}
catch (Exception ex)
{
Sharefile_Error = ex.Message;
}
return listFiles;
}
}
public class Fileinfo_share
{
public string FullName { get; set; }
public string filename { get; set; }
}
}
读取调用:
注意:无账号密码访问:调用 ShareLib.connectState(@"\\192.168.3.3\Test");
//连接共享目录
bool status = ShareLib.connectState(@"\\192.168.3.3\Test", "fan1", "fan");
if (status)
{
//查找文件
List<Fileinfo_share> files = ShareLib.GetAllFiles(@"\\192.168.3.3\Test", "*");
foreach (Fileinfo_share item in files)
{
//下载文件
bool rel = ShareLib.TransportRemoteToLocal(item.FullName, Application.StartupPath + "\\Temp\\", item.filename); //实现将远程服务器文件写入到本地
if (rel)
{
MessageBox.Show("下载完毕:" + item.FullName);
}
else
{
MessageBox.Show("下载失败!" + ShareLib.Sharefile_Error);
}
}
}
else
{
MessageBox.Show("未能连接!" + ShareLib.Sharefile_Error);
}
上传调用:
bool status = ShareLib.connectState(@"\\192.168.3.3\Test", "fan1", "fan");
if (status)
{
//查找本地文件
List<Fileinfo_share> files = ShareLib.GetAllFiles(Application.StartupPath + "\\Temp\\", "*");
foreach (Fileinfo_share item in files)
{
//上传
bool rel = ShareLib.TransportLocalToRemote(item.FullName, @"\\192.168.3.3\Test\", item.filename); //实现将远程服务器文件写入到本地
if (rel)
{
MessageBox.Show("上传完毕:" + item.FullName);
}
else
{
MessageBox.Show("上传失败!" + ShareLib.Sharefile_Error);
}
}
}
else
{
MessageBox.Show("未能连接!" + ShareLib.Sharefile_Error);
}
改造:遍历指定目录内所有子级文件夹内文件
private static List<Fileinfo_share> listFiles = new List<Fileinfo_share>();
/// <summary>
/// 模糊搜索文件:远程与本地通用
/// </summary>
/// <param name="SourceFile">远程路径</param>
/// <param name="kzm">所有文件: * ;指定格式文件:.txt</param>
private static List<Fileinfo_share> _GetAllFiles(string SourceFile, string kzm)
{
try
{
DirectoryInfo dir = new DirectoryInfo(SourceFile);
//根目录下的文件
foreach (var file in dir.GetFiles())
{
if (kzm == "*")
{
Fileinfo_share fi = new Fileinfo_share();
fi.FullName = file.FullName;
fi.filename = file.Name;
listFiles.Add(fi);
}
else if (file.Extension == kzm)
{
Fileinfo_share fi = new Fileinfo_share();
fi.FullName = file.FullName;
fi.filename = file.Name;
listFiles.Add(fi);
}
}
//子级目录下的文件
DirectoryInfo[] fileInfo = dir.GetDirectories();
foreach (DirectoryInfo item in fileInfo)
{
//递归
_GetAllFiles(item.FullName, kzm);
}
}
catch (Exception ex)
{
Sharefile_Error = ex.Message;
}
return listFiles;
}
public static List<Fileinfo_share> GetAllFiles(string SourceFile, string kzm)
{
//因为用的静态类,所以需要先清空在调用,否则多次调用文件就重复咯。
listFiles.Clear();
List<Fileinfo_share> Files = _GetAllFiles(SourceFile, kzm);
return Files;
}
//调用 :
List<Fileinfo_share> files = ShareLib.GetAllFiles(@"\\192.168.3.3\Test", "*");