C# Создать каталог на основе значения почтового индекса файла и передачи файлов с использованием System.IO, System.Data и CSVReader
Существующее приложение: у меня есть приложение на C#, которое запускает поиск, выбирает совпадающие файлы ссылок и выбрасывает их в определенный каталог.
Добавление функциональности: попросите систему проверить, существует ли подкаталог для почтового индекса файла, и, если он не существует, создайте его, тогда я хочу, чтобы файл был перенесен в этот соответствующий каталог.
Проблема: Прямо сейчас, ни один из файлов не передается, и ни один из подкаталогов не создается. Ничего не произошло. Это проблема с синтаксисом, или я называю это неправильно???
Пожалуйста помоги!
Вот что я добавил:
string targetzipdir = m_sc.get_TargetPath() + "\\" + ZIP;
// If the zip code subdirectory doesn't exist, create it.
if (!Directory.Exists(targetzipdir))
{
Directory.CreateDirectory(targetzipdir);
}
private void TransferFile(string sourceDir, string filename, string ZIP)
{
string targetFileAndPath = m_sc.get_TargetPath() + "\\" + ZIP + "\\" + fullFileName;
Вот больше кода в файле SearchProcess.cs для большей картины (с некоторыми оставленными вещами):
public void Run()
{
m_sc = (SearchCriteria)m_form.Invoke(m_form.m_DelegateGetSearchCriteria);
// Display parameters
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Corp: " + m_sc.get_Corp() });
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on OrderNumber: " + m_sc.get_OrderNumber() });
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Campaign: " + m_sc.get_Campaign() });
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on City: " + m_sc.get_City() });
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on State: " + m_sc.get_State() });
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Zip: " + m_sc.get_Zip() });
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Source Path: " + m_sc.get_SourcePath() });
m_form.Invoke(m_form.m_DelegateAddString, new Object[] { "Search on Target Path: " + m_sc.get_TargetPath() });
DirSearch(m_sc.get_SourcePath());
// Make asynchronous call to main form
// to inform it that thread finished
m_form.Invoke(m_form.m_DelegateThreadFinished, null);
}
for (int colNum = 0; colNum < expectedTypes.Count; colNum++)
{
if (m_sc.get_SearchOR().Equals(true))
// Check for the Zip match
if (m_sc.get_Zip() != "" && ZIP.Contains(m_sc.get_Zip()) == true)
{
found = true;
string targetzipdir = m_sc.get_TargetPath() + "\\" + ZIP;
// If the zip code subdirectory doesn't exist, create it.
if (!Directory.Exists(targetzipdir))
{
Directory.CreateDirectory(targetzipdir);
}
} // ending if (m_sc.get_SearchOR().Equals(true))
} //ending for loop
private void TransferFile(string sourceDir, string filename, string ZIP)
{
string fullFileName = filename + ZIP + ".pdf";
string fullFileNameAndPath = sourceDir + "\\" + fullFileName;
//copy matching source file into the specified subdirectory based on zip
string targetFileAndPath = m_sc.get_TargetPath() + "\\" + ZIP + "\\" + fullFileName;
// Copy the file if the source file exists
if (File.Exists(fullFileNameAndPath))
{
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"COPYING FROM: " + fullFileNameAndPath});
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"TO: " + targetFileAndPath});
// Do the copy, overrite the target file if it exists
File.Copy(fullFileNameAndPath, targetFileAndPath, true);
}
else
{
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"Source file does not exist: " + fullFileNameAndPath});
}
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {""});
}
Спасибо за внимание! Благодарим за любую идею!:)
1 ответ
Я нашел проблему! У меня был код для создания каталога в неправильном месте. Он находился в операторе If для сопоставления почтового индекса и выполнялся только в том случае, если почтовый индекс совпадал, а почтовый индекс является необязательным полем в поиске. Я переместил весь код в метод TransferFile, и он работал нормально. Кроме того, исходный каталог данных должен был указывать на C:\Documents and Settings\bmccarthy\Desktop\sourcedir, а файлы должны быть в специальном формате в подкаталоге этого каталога в C: \ Documents and Settings \ bmccarthy \ Desktop \ SourceDir\AMLDailyHotLeads20101001
Вот переписанный код:
// Copy the file if ANY of the search criteria have been met
if (found)
{
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"FOUND: Order_No: " + Order_No +
" barcode: " + barcode +
" MailerCode: " + MailerCode +
" AgentID: " + AgentID +
" City: " + City +
" State: " + State +
" ZIP: " + ZIP});
//passes values to TransferFile
TransferFile(directory, barcode, AgentID, ZIP);
}
} // end for that finds each matching record
}
// find and copy the file to the target directory string ZIP
private void TransferFile(string sourceDir, string filename, string AgentID, string ZIP)
{
string fullFileName = filename + ".pdf";
string fullFileNameAndPath = sourceDir + "\\" + fullFileName;
string targetFileAndPath;
// adds the given lead's agentid and zip code to the targetpath string
string targetzipdir = m_sc.get_TargetPath() + "\\" + AgentID + "\\" + ZIP;
// If the given lead's zip code subdirectory doesn't exist, create it.
if (!Directory.Exists(targetzipdir))
{
Directory.CreateDirectory(targetzipdir);
}
targetFileAndPath = m_sc.get_TargetPath() + "\\" + AgentID + "\\" + ZIP + "\\" + fullFileName;
// Copy the file if the source file exists
if (File.Exists(fullFileNameAndPath))
{
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"COPYING FROM: " + fullFileNameAndPath});
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"TO: " + targetFileAndPath});
// Copy the file and over-write the target file if it exists
File.Copy(fullFileNameAndPath, targetFileAndPath, true);
}
else
{
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {"Source file does not exist: " + fullFileNameAndPath});
}
m_form.Invoke(m_form.m_DelegateAddString, new Object[] {""});
}