Определите, является ли файл пустым (SSIS) - PullRequest
4 голосов
/ 24 февраля 2011

Я пытаюсь разработать пакет в SSIS 2005, и часть моего процесса заключается в проверке, пуст ли файл в сети или нет. Если он не пустой, мне нужно передать статус успешного, в противном случае мне нужно передать статус неудачного. Я думаю, что мне нужно сценарий, но я не уверен, как это сделать. Любая помощь приветствуется.

Ответы [ 4 ]

11 голосов
/ 24 февраля 2011

Создайте соединение с плоским файлом на панели «Диспетчеры соединений».На вкладке Поток управления добавьте Задачу потока данных.enter image description here

Дважды щелкните задачу «Поток данных» и добавьте элемент «Плоский файл» и «Число строк».enter image description here

В свойствах счетчика строк создайте переменную RowCount.enter image description here

На вкладке Поток управления создайте соединения потока управления на основе результата @RowCount.enter image description here

2 голосов
/ 24 февраля 2011

Есть два способа сделать это:

Если файл пуст означает размер = 0, вы можете создать задачу сценария, чтобы выполнить проверку: http://msdn.microsoft.com/en-us/library/ms345166.aspx

If My.Computer.FileSystem.FileExists("c:\myfile.txt") Then

  Dim myFileInfo As System.IO.FileInfo
  myFileInfo = My.Computer.FileSystem.GetFileInfo("c:\myfile.txt")

  If myFileInfo.Length = 0 Then
    Dts.Variables["Status"].Value = 0
  End If
End If

В противном случае, еслиПустой файл означает отсутствие строк (плоский файл), вы можете использовать преобразование «Количество строк» ​​после чтения файла.Вы можете установить переменную из счетчика строк, используя свойство VariableName в редакторе счетчиков строк, и использовать его в качестве статуса.

0 голосов
/ 05 февраля 2016

Добавление простой задачи сценария со следующим кодом (C #) должно помочь:

String FilePath = (string)Dts.Variables["User::FilePath"].Value;

var length = new System.IO.FileInfo(FilePath).Length;

if (length == 0)
    Dts.TaskResult = (int)ScriptResults.Success;
else
    Dts.TaskResult = (int)ScriptResults.Failure;

Эта опция будет выполняться намного быстрее, чем принятый ответ, так как не нужно читать весь текст целиком.файл, если вы циклически просматриваете папку с файлами, и некоторые из них имеют большой размер, в моем случае ~ 800 МБ, принятый ответ может занять несколько лет, это решение запускается за считанные секунды.

0 голосов
/ 24 февраля 2011

Да, задача «Сценарий» выполнит эту работу здесь.Добавьте оператор System.IO в начало скрипта, а затем что-то вроде следующего в методе Main проверит содержимое файла.

        public void Main()
    {
        String FilePath = Dts.Variables["User::FilePath"].Value.ToString();

        String strContents;
        StreamReader sReader;
        sReader = File.OpenText(FilePath);
        strContents = sReader.ReadToEnd();
        sReader.Close();
        if (strContents.Length==0)
            MessageBox.Show("Empty file");

        Dts.TaskResult = (int)ScriptResults.Success;
    }

Редактировать: версия VB.Net для2005 ...

    Public Sub Main()

    Dim FilePath As String = Dts.Variables("User::FilePath").Value.ToString()
    Dim strContents As String
    Dim sReader As StreamReader

    sReader = File.OpenText(FilePath)
    strContents = sReader.ReadToEnd()
    sReader.Close()
    If strContents.Length = 0 Then
        MessageBox.Show("Empty file")
    End If

    Dts.TaskResult = ScriptResults.Success
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...