我的问题是这个,在我惹恼任何人之前,这是我的第一篇文章,所以如果我犯错,请原谅我。
我创建了一个带有文件系统监视器的简单Windows服务,如果粘贴了.txt文件,则会触发控制台应用程序。该服务作为本地系统运行,并且运行良好。但是,它所监视的文件每天早上都由远程用户保存,并且控制台应用程序无故失败。如果我保存文件,服务和控制台应用程序就会完全按照预期进行操作。
控制台应用程序使用GeneticParsing Library将文件读入表中,将其批量加载到远程服务器上的oracle 11g db中,然后归档该文件。控制台应用程序的主要代码如下...任何帮助将不胜感激!
static void Main(string[] args)
{
try
{
FileInfo f = new FileInfo(args[0].ToString());
Thread.Sleep(15000);
GenericParserAdapter p = new GenericParserAdapter();
p.ColumnDelimiter = '|';
p.SetDataSource(f.FullName);
DataTable d = new DataTable();
d = p.GetDataTable();
bb_usage_methods b = new bb_usage_methods(false);
DataTable d_merge = new DataTable();
d_merge.Columns.Add("BB_USAGE_ID", Type.GetType("System.Int32"));
d_merge.Columns.Add("USAGE_DATE", Type.GetType("System.DateTime"));
d_merge.Columns.Add("PARTY_CODE", Type.GetType("System.Int32"));
d_merge.Columns.Add("UPLOAD_USAGE", Type.GetType("System.Decimal"));
d_merge.Columns.Add("DOWNLOAD_USAGE", Type.GetType("System.Decimal"));
d_merge.Columns.Add("TOTAL_USAGE", Type.GetType("System.Decimal"));
DataRow r;
object j = b.get_data_from_datareader("SELECT MAX(BB_USAGE_ID) FROM USAGE");
Int32 max_id = j.ToString() == "Entry is NULL" || j.GetType() == System.Type.GetType("System.Exception") ? max_id = 1 : max_id = Convert.ToInt32(j) + 1;
for (int i = 0; i < d.Rows.Count; i++)
{
r = d.Rows[i];
try
{
object[] o = { max_id, Convert.ToDateTime(r[0]), Convert.ToDecimal(r[1]), Convert.ToDecimal(r[2]), Convert.ToDecimal(r[3]), Convert.ToDecimal(r[4]) };
d_merge.Rows.Add(o);
max_id++;
}
catch { }
r = null;
}
decimal original_count = Math.Round((decimal)(d.Rows.Count * 100) / d_merge.Rows.Count, 2);
b.bulk_insert_into_oracle(d_merge, "USAGE");
DateTime dt = f.LastWriteTime;
try
{
File.Move(f.FullName, f.FullName.Replace(f.Name, @"\..\Archive\" + f.Name));
}
catch (Exception e)
{
// code to log error to db
}
}
catch (Exception ex)
{
// code to log error to db
}
}
}
public class log_methods : x.oracle_data_access
{
public log_methods()
{
base.get_dataset("SELECT * FROM APP_LOG", "LOG_ID");
}
}
public class bb_usage_methods : x.oracle_data_access
{
public bb_usage_methods(Boolean get_dataset)
{
if (get_dataset)
{
base.get_dataset("SELECT * FROM USAGE", "BB_USAGE_ID");
}
}
}
答案 0 :(得分:0)
您确定filewatcher会看到该文件吗? 当远程用户保存程序时,程序是否完全启动。
如果我没记错的话,有些情况下filewatcher不应该触发(远程或其他)。