테이블 열의 파일 이름이 존재하면 ftp 서버 디렉토리에 파일 이름이 있는지 확인한 다음 update (update query 사용) 열 Isexists 값을 1
그대로 유지합니다.이 FtpWebRequest 코드를 더 빠르게 만드는 방법은 무엇입니까?
DataTable을 사용하여 각 행 (파일 이름)을 읽은 다음 항상 FtpWebRequest를 작성하여 파일이 존재하지 않는지 확인합니다.
이 방법은 CheckIfFtpFileExists(string fileUri
입니다.) 횟수를 요청하는 것은 번호와 같습니다. DataTable의 행 수
FTP 인증을 만들 수있는 방법이 있습니까? 한 번만 호출 한 다음 함수를 호출하십시오.
제안 사항 속도를 향상시키기 위해 어떻게 코드를 향상시킬 수 있습니까?
namespace FTP_File_Check
{
class Program
{
static void Main(string[] args)
{
string connString = @"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DMSTG;Data Source=.";
string sql = @"SELECT full_file_name from Intellitrack.S_Sr_att_Delta_Consolidated_28082012 where Isexists=0";
SqlConnection conn = new SqlConnection(connString);
conn.Open();
SqlDataAdapter da = new SqlDataAdapter(sql, conn);
DataTable dt = new DataTable();
da.Fill(dt);
foreach (DataRow row in dt.Rows)
{
foreach (DataColumn col in dt.Columns)
{
SqlConnection sqlConnection1 = new SqlConnection("Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=DMSTG;Data Source=.");
SqlCommand cmd = new SqlCommand();
cmd.CommandType = CommandType.Text;
if (CheckIfFtpFileExists("ftp://myftpaddressgoeshere.com/0708/" + row[col].ToString()))
{
// Found File Exists
cmd.CommandText = @"UPDATE Intellitrack.S_Sr_att_Delta_Consolidated_28082012
SET Isexists = 1
where full_file_name='" + row[col].ToString() + "'";
cmd.Connection = sqlConnection1;
sqlConnection1.Open();
cmd.ExecuteNonQuery();
sqlConnection1.Close();
}
}
}
}
public static bool CheckIfFtpFileExists(string fileUri)
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(fileUri);
request.Credentials = new NetworkCredential("myuserid", "mypassword");
request.KeepAlive = true;
request.ConnectionGroupName = "file";
request.ServicePoint.ConnectionLimit = 8;
request.UseBinary = true;
request.UsePassive = false;
request.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
try
{
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
FtpWebResponse response = (FtpWebResponse)ex.Response;
if (FtpStatusCode.NotLoggedIn == response.StatusCode)
{
Console.WriteLine("Failed to connect to ftp server");
Console.ReadLine();
Environment.Exit(99);
}
else
{
if (FtpStatusCode.ActionNotTakenFileUnavailable == response.StatusCode)
{
return false;
}
}
}
return true;
}
}
}
은 모두 동일한 원격 디렉토리에있는 파일입니까? – paul
원격 서버의 @paul yes를 하나의 디렉토리에 저장합니다. –