我有一個try catch語句,它處理讀取xml文件列表並將它們輸出到csv文件。如何使程序調用不同的方法,如果發生異常
現在我想能夠將錯誤的xml文件從健康的文件移動到不同的文件夾,但不知道如何去做。
我迄今爲止得到的是如下:
bool faultyYN = false;
foreach (string filename in XMLFiles)
{
using (var reader = new StreamReader(filename))
{
string shortFileName = Path.GetFileNameWithoutExtension(filename);
XMLShredder.DataFile df = null;
try
{
var sw = new Stopwatch();
sw.Start();
df = Shredder.ShredDocument(XDocument.Load(reader, LoadOptions.SetLineInfo));
sw.Stop();
var elapsed = sw.ElapsedMilliseconds;
_log.InfoFormat(" Shredded file <{0}> in {1}ms", shortFileName, elapsed);
string outputFileName = Path.Combine(outputDirectory, shortFileName) + ".csv";
sw.Reset();
sw.Start();
using (var writer = new ChunkedShreddedFileWriter(outputFileName))//full file path
{
new DataFileCsvWriter().Write(df,
writer);
}
sw.Stop();
var elapsed2 = sw.ElapsedMilliseconds;
_log.InfoFormat(" Wrote file <{0}> in {1}ms", shortFileName, elapsed2);
}
catch (XmlException e)
{
_log.Error(String.Format("Reading failed due to incorrect structure in XML Document. File Name : <{0}>. Error Message : {1}.", shortFileName, e.Message), e);
faultyYN = true;
}
catch (IOException e)
{
_log.Error(String.Format("Reading failed due to IO Exception. File Name : <{0}>. Error Message : {1}.", shortFileName, e.Message), e);
}
if(bool faultyYN == true)
{
MoveFaultyXML(faultyXMLDirectory, shortFileName);
}
}
TidyUp(XMLFiles);//deletes the files after the process has finished.
}
我試圖捕捉後加入移動錯誤文件錯誤的目錄,但文件仍不斷收到刪除。
所以基本上不工作,因爲我不知道我應該從哪裏調用它的方法是「MoveFaultyXML(faultyXMLDirectory,shortFileName)」。
我已閱讀,我不應該使用異常分支出來,但在這種情況下,我想不出一個替代的解決方案來淨。我必須拋出異常來知道文件有問題。
如果沒有處理這是更好的做法,或者如果這樣的作品的另一種方式,但我做錯了,請您幫助我,我真的很感激它。
謝謝, 捷特諾。
這段代碼不可能編譯,例如你將一個null分配給一個bool。您應該在設置faultyYN = true的位置調用MoveFaultyXML。 –
刪除了其他人建議的標誌,並將該呼叫轉移到catch內。現在唯一的問題是將文件從閱讀器中釋放出來,以便將其移動到所需的目錄。 – Jetnor
只需調用reader.Close()。 –