C#とVBScriptのブログ

VBScriptユーザーがC#に挑戦だ

FTPUpload(sample)

FTP Upload
System.Xml の参照設定が必要

settings.xmlの例

<FtpUpClass>
  <UserName>655123</UserName>
  <Password>win123</Password>
  <SourceFolder>C:\tmp</SourceFolder>
  <LogFolder>C:\LOG</LogFolder>
  <FtpServer>ftp://192.168.1.1/test</FtpServer>
</FtpUpClass>
using System;
using System.IO;
using System.Net;
using System.Threading;
using System.Diagnostics;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.Serialization;

public class FtpUpClass
{
	public string UserName;
	public string Password;
	public string SourceFolder;
	public string LogFolder;
	public string FtpServer;
}

class Program
{
	static void Main()
	{
		XmlSerializer serializer = new XmlSerializer ( typeof ( FtpUpClass ));
		FileStream fs = new FileStream ( Directory .GetCurrentDirectory() + "\\" + "settings.xml" , FileMode .Open);
		FtpUpClass settings = ( FtpUpClass )serializer.Deserialize(fs);
		fs.Close();
		
		string destinationFolder;
		string uri;
		string filename;
		string logFileName;
		string logDateFolder;
	
		Dictionary < string , string > dict = new Dictionary < string , string >();
		dict[ @"btest_\d{8}\.zip$" ] = "folder_b" ;
		dict[ @"dtest_\d{8}\.zip$" ] = "folder_d" ;
		dict[ @"stest_\d{8}\.zip$" ] = "folder_s" ;
		dict[ @"ttest_\d{8}\.zip$" ] = "folder_t" ;
		dict[ @"I123_ptn|num_\d{8}\.zip$" ] = "p_folder" ;
		
		logDateFolder = CreateDateFolder(settings.LogFolder);
		logFileName = Path .Combine(logDateFolder, DateTime .Today.ToString( "yyyyMMdd" ) + "FTP.log" );
		
		DefaultTraceListener drl;
		drl = ( DefaultTraceListener ) Trace .Listeners[ "Default" ];
		drl.LogFileName = logFileName;
		drl.WriteLine(System. DateTime .Now + " " + " 開始");
	
		try
		{
			WebClient wc = new WebClient ();
			wc.Credentials = new NetworkCredential (settings.UserName,settings.Password);
			foreach ( string key in dict.Keys){
			string [] files = FindFiles(settings.SourceFolder,key,"*.zip",true);
			foreach ( string file in files)
			{
				filename = Path .GetFileName(file);
				destinationFolder = dict[key];
				uri = settings.FtpServer + destinationFolder + "/" + filename;
				wc.UploadFile(uri, file);
				drl.WriteLine(System. DateTime .Now + " " + file);
			}
		}
		wc.Dispose();
		drl.WriteLine(System. DateTime .Now + " " + " 終了");
		} catch (System. Exception ex){
			drl.WriteLine(System. DateTime .Now + " " + ex.Message);
		}
	}
	
        使用する関数
	static string [] FindFiles( string path, string pattern, string wildcard, bool ignorecase)
	static string CreateDateFolder( string targetFolder)