Я пытаюсь сравнить два текстовых файла в задаче сценария в пакете служб SSIS. Оба файла существуют в файловой системе. Оба файла находятся в одном каталоге. Тем не менее, он не существует, потому что настройки разрешений не видят файл.
Код ниже не работает. Я попробовал несколько различных вариантов приведенного ниже кода, и пакет служб SSIS продолжает go пересылку, что в конечном итоге приводит к сбою в последующей задаче файловой системы, поскольку у него нет доступа к файлу.
Я пытаюсь захватить, что файл отсутствует, потому что пакет не имеет доступа к файлу, а не потому, что файл не существует. Первоначально я использовал File.Exists()
, но это не сработает, потому что он возвращает false
, если файл отсутствует или пакет не имеет к нему доступа.
string packageName = Dts.Variables["System::PackageName"].Value.ToString();
string taskName = Dts.Variables["System.TaskName"].Value.ToString();
string inputFilePath = Dts.Variables["User::inputFilePath"].Value.ToString();
string processedFilePath = Dts.Variables["User::processedFilePath"].Value.ToString();
bool blnFilesMatch = true;
try
{
int i = 0, j = 0;
// Compare the source and processed files to determine if the contents are different.
using (var f1 = new FileStream(inputFilePath, FileMode.Open))
using (var f2 = new FileStream(processedFilePath, FileMode.Open))
{
do
{
i = f1.ReadByte();
j = f2.ReadByte();
if (i != j)
break;
} while (i != -1 && j != -1);
if (i != j)
blnFilesMatch = false; // Files Differ
else
blnFilesMatch = true; // Files are the same
}
Dts.Variables["User::blnIdenticalFiles"].Value = blnFilesMatch;
Dts.TaskResult = (int)ScriptResults.Success;
}
catch (FileNotFoundException)
{
string tempFileName = "temp_" + packageName + ".txt.";
string tempFilePath = Path.Combine(Path.GetDirectoryName(inputFilePath), tempFileName);
// A file wasn't found. Try to create and delete a temp file to determine whether it was because of permissions or if the file just was not present.
try
{
File.Create(tempFilePath);
File.Delete(tempFilePath);
Dts.Variables["User::blnIdenticalFiles"].Value = false;
}
catch (UnauthorizedAccessException uae)
{
// Permissions cannot create the file.
Dts.Events.FireError(0, packageName + " - " + taskName, uae.Message, string.Empty, 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}
}
catch (Exception ex)
{
Dts.Events.FireError(0, packageName + " - " + taskName, ex.Message, string.Empty, 0);
Dts.TaskResult = (int)ScriptResults.Failure;
}