public void Run()
{
//获取目标文件列表
string _ErrorMessage = "";
string _ErrorMessageFile = "errorLog.txt";
FileHelper fh = new FileHelper();
string servername = "";//服务器地址
string username = "";//用户名
string password = "";//用户密码
string filePath = "";//源文件目录
string targetFilePath = "";//目标目录 string _configtxt = "configtxt.txt";//配置文件
string _foldertxt = "foldertxt.txt";//源文件及目标目录列表 try
{
//获取配置文件
string configRes = GetFileString(_configtxt); if (configRes == "读取配置文件失败")
{
Console.WriteLine("读取配置文件失败");
_ErrorMessage = "读取配置文件失败";
WriteLog(_ErrorMessage, _ErrorMessageFile);
return;
}
//登录
Dictionary<string, string> dicconfig = GetDicFromStr(configRes);
try
{
servername = dicconfig["servername"];
username = dicconfig["username"];
password = dicconfig["password"];
}
catch
{
Console.WriteLine("配置文件错误");
_ErrorMessage = "配置文件错误";
WriteLog(_ErrorMessage, _ErrorMessageFile);
return;
}
//开始读取源文件数据
string folderRes = GetFileString(_foldertxt);
Dictionary<string, string> dicFolders = GetDicFromStr(folderRes);
string _defaultfolder = "";//默认拷贝目录
foreach (var folderdata in dicFolders)
{
if (folderdata.Key == "defaultfolder")
{
_defaultfolder = folderdata.Value;
continue;
}
filePath = folderdata.Key;//源文件目录 string temptargetFilePath = folderdata.Value == "" ? _defaultfolder : folderdata.Value;
//获取源文件后2个目录名
string toFilePath = filePath.Split('\\')[filePath.Split('\\').Length - ] + "\\" + filePath.Split('\\')[filePath.Split('\\').Length - ];
targetFilePath = temptargetFilePath.Trim('\\') + "\\" + toFilePath;//目标文件目录
if (!Directory.Exists(targetFilePath))
{
Directory.CreateDirectory(targetFilePath);
} //建立连接并且下载
if (FileHelper.connectState(servername, username, password))
{
string[] fileArr = fh.readlist(filePath);
//剪切所有文件
foreach (string filename in fileArr)
{
try
{
fh.FileMove(filename, targetFilePath.Trim('\\') + "\\" + GetFileNameFromPath(filename));
}
catch
{
Console.WriteLine(filename + " 文件下载失败"+DateTime.Now.ToString());
}
}
} } }
catch(Exception ex)
{
Console.WriteLine(ex.Message + ex.Source + ex.TargetSite);
_ErrorMessage = ex.Message + ex.Source + ex.TargetSite;
}
if (_ErrorMessage != "")
{
WriteLog(_ErrorMessage, _ErrorMessageFile);
} }
//写错误日志
private void WriteLog(string data,string logname)
{
try
{
FileMode fm = FileMode.Append;
if (!File.Exists(System.AppDomain.CurrentDomain.BaseDirectory+logname))
{
fm = FileMode.CreateNew;
}
string configfilename = System.AppDomain.CurrentDomain.BaseDirectory + logname;
//读取文本文件
FileStream fs = new FileStream(configfilename, fm);
StreamWriter sw = new StreamWriter(fs, Encoding.Default); sw.Write(DateTime.Now.ToString()+"---------"+ data); //释放占用
sw.Close();
sw.Dispose();
fs.Close();
fs.Dispose();
}
catch
{
} } private Dictionary<string, string> GetDicFromStr(string sourcestr)
{
Dictionary<string, string> dicres = new Dictionary<string, string>();
string[] datas = sourcestr.Replace("\r","").Split('\n');
foreach (string data in datas)
{
if (string.IsNullOrEmpty(data))
{
continue;
}
try
{
string[] dataarr = data.Split('=');
if (dataarr.Length == )
{ dicres.Add(dataarr[], dataarr[]);
}
else
{
dicres.Add(dataarr[], "");
}
}
catch
{ }
}
return dicres;
}
private string GetFileNameFromPath(string path)
{
return path.Split('\\')[path.Split('\\').Length - ];
}
private string GetFileString(string configname)
{
try
{
string configfilename = System.AppDomain.CurrentDomain.BaseDirectory + configname;
//读取文本文件
FileStream fs = new FileStream(configfilename, FileMode.Open);
StreamReader m_streamReader = new StreamReader(fs, Encoding.Default);
m_streamReader.BaseStream.Seek(, SeekOrigin.Begin);
//获取数据
string myFileStr = m_streamReader.ReadToEnd(); //释放占用
m_streamReader.Close();
m_streamReader.Dispose();
fs.Close();
fs.Dispose(); return myFileStr;
}
catch
{
return "读取配置文件失败";
}
}

Filehelper.cs内容

 public class FileHelper
{ System.Collections.ArrayList alst; //得到路径下所有文件(包括子文件夹下的文件)
public string[] readlist(string path)
{
alst = new System.Collections.ArrayList();//建立ArrayList对象
GetDirs(path);//得到文件夹
return (string[])alst.ToArray(typeof(string));//把ArrayList转化为string[]
} public void GetFiles(string dir)
{
try
{
string[] files = Directory.GetFiles(dir);//得到文件
foreach (string file in files)//循环文件
{
string exname = file.Substring(file.LastIndexOf(".") + );//得到后缀名
// if (".txt|.aspx".IndexOf(file.Substring(file.LastIndexOf(".") + 1)) > -1)//查找.txt .aspx结尾的文件
//if (".txt".IndexOf(file.ToLower().Substring(file.LastIndexOf(".") + 1)) > -1)//如果后缀名为.txt文件
//{
// FileInfo fi = new FileInfo(file);//建立FileInfo对象
// alst.Add(fi.FullName);//把.txt文件全名加人到FileInfo对象
//}
FileInfo fi = new FileInfo(file);//建立FileInfo对象
alst.Add(fi.FullName);
}
}
catch
{ }
} public void GetDirs(string d)//得到所有文件夹
{
GetFiles(d);//得到所有文件夹里面的文件
try
{
string[] dirs = Directory.GetDirectories(d);
foreach (string dir in dirs)
{
GetDirs(dir);//递归
}
}
catch
{
}
} //文件剪切
public void FileMove(string filePath, string toFilePath)
{
string dirPath = filePath;
string sourcePath = toFilePath;
FileInfo file = new FileInfo(dirPath);
file.MoveTo(sourcePath);
}
//建立共享文件连接
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 + " /user:" + userName + " " + passWord ;
proc.StandardInput.WriteLine(dosLine);
proc.StandardInput.WriteLine("exit");
while (!proc.HasExited)
{
proc.WaitForExit();
}
string errormsg = proc.StandardError.ReadToEnd();
proc.StandardError.Close();
if (string.IsNullOrEmpty(errormsg))
{
Flag = true;
}
else
{
throw new Exception(errormsg);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
proc.Close();
proc.Dispose();
}
return Flag;
} }

c#下载共享文件夹下的文件并记录错误日志的更多相关文章

  1. 共享文件夹下其他文件可以访问但php文件访问不了的原因

    刚开始的问题是在virtualbox里的共享文件夹下的项目运行不了,原因是宝塔下nginx的用户和用户组默认是www 和 www 需要改成www vboxsf(因为自动挂载的目录为/media/sf_ ...

  2. vba取局域网电脑共享文件夹下的Excel文件

    Private Sub CommandButton1_Click()    Dim xlapp1 As Excel.Application    Dim xlbook1 As Excel.Workbo ...

  3. C#下载局域网共享文件夹中的文件

    在公司的局域网内部,有个主机,共享了几个文件夹给下面的客户机使用. 想要利用这个文件夹上传最新的winform程序版本,每次运行exe的时候检测局域网的软件版本达到更新exe的目的. 这里有个例子,是 ...

  4. C#遍历文件夹下所有文件

    FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...

  5. Delphi - 本地路径的创建、清空本地指定文件夹下的文件

    本地路径的创建 在做下载操作时,我们一般先把文件下载到本地指定的路径下,然后再做其他使用. 为了防止程序出现异常,我们通常需要先判断本地是否存在指定的路径. 以C盘Tmp文件夹为例,我们可以这样做,代 ...

  6. asp.net(C#)读取文件夹和子文件夹下所有文件,绑定到GRIDVIEW并排序 .

    Asp部分: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="MyFiles ...

  7. python 替换 文件夹下的 文件名称 及 文件内容

    示例效果: 1.替换某文件夹下的 文件夹及子文件夹 的名称 由OldStrDir 变为 NewStrDir: 2.替换某文件夹下的 文件夹及子文件夹 下 所有的文件的名称 由OldStrFile 变为 ...

  8. java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面

    将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...

  9. 【转发】du命令 实现Linux 某个文件夹下的文件按大小排序

    1. df -lh 2. du -s /usr/* | sort -rn这是按字节排序 3. du -sh /usr/* | sort -rn这是按兆(M)来排序 4.选出排在前面的10个du -s ...

随机推荐

  1. 为什么DOM操作很慢

    转自:http://kb.cnblogs.com/page/534571/ 一直都听说DOM很慢,要尽量少的去操作DOM,于是就想进一步去探究下为什么大家都会这样说,在网上学习了一些资料,这边整理出来 ...

  2. Entity Framework 6 开发系列 目录

    2014 年开始接触 Entity Framework 6 也快两年,用它已经沉淀了一个成熟架构,也用来开发了不少大大小小的产品和项目,直到这段时间,才真正有时间来回顾,重新学习它,为让大家更加了解E ...

  3. Android—9.png的制作和去除黑线

    在开发中为了避免图片因为拉伸而失真我们会把背景图片设置为9.png图片,这篇博客介绍的是如何将图片设置为9.png的 1.首先在android—>sdk—>tools文件夹中打开下图所示文 ...

  4. Storm Bolt接口

          Bolt是Topology中数据处理的基本单元,也是Storm针对处理过程的编程单元.Topology中所有的处理都是在这些bolt中完成的. Bolt可以将数据项发送至多个数据流(Str ...

  5. jquery实现全选、全不选、反选操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  6. wxpython 拖放

    拖放对用户是非常直观.它在许多桌面应用程序,用户可以复制或只需用鼠标拖动和删除另一个窗口中移动对象从一个窗口到另一个中. 拖放操作包括以下步骤 - 声明拖放目标 创建数据对象 创建 wx.DropSo ...

  7. iPhone doesn’t support any of GongShangJ.app’s architectures. You can add iPhone’s armv7s architectu

    iPhone doesn't support any of GongShangJ.app's architectures. You can add iPhone's armv7s architectu

  8. 常用几种Java Web容器

    Web服务器是运行及发布Web应用的容器,只有将开发的Web项目放置到该容器中,才能使网络中的所有用户通过浏览器进行访问.开发Java Web应用所采用的服务器主要是与JSP/Servlet兼容的We ...

  9. MO_GLOBAL包中一些过程和函数的使用

    DECLARE V_CURRENT_ORG_ID NUMBER; V_ACCESS_MODE VARCHAR2(2); V_OU_COUNT NUMBER; V_ORG_ID NUMBER; V_MO ...

  10. MongoDB 教程(五):连接、新建数据库、删除数据库

    连接 启动 MongoDB 服务 只需要在 MongoDB 安装目录的 bin 目录下执行 mongodb 即可. 执行启动操作后,mongodb 在输出一些必要信息后不会输出任何信息,之后就等待连接 ...