2013-07-10 21 views
8

Chcę sprawdzić, czy plik istnieje w określonym folderze z SSIS. Jak mogę to zrobić?Zadanie skryptu SSIS, aby sprawdzić, czy plik istnieje w folderze czy nie

+1

Możesz użyć tego jako punktu wyjścia. http://stackoverflow.com/questions/7385251/how-to-check-if-a-file-exists-in-a-folder –

+0

Używam poniższego kodu Dts.Variables ("FileExists"). = File.Exists (Dts.Variables ("FileLocation"). Wartość) gdzie FileExists jest zmienną binarną, a "FileLocation" jest zmienną łańcuchową o ścieżce pliku Chociaż plik jest obecny w folderze, nadal podaje wartość False . – user1429135

+0

Ciekawe, czy podane poniżej rozwiązanie było dla Ciebie przydatne i czy udało Ci się rozwiązać problem. Twoja opinia będzie pomocna dla mnie, a także przyszłych użytkowników, którzy mają podobny problem. Dzięki. –

Odpowiedz

9

Zmienne:

folder - łańcuch - C :: \ Temp \

plik - łańcuch - 1.txt

Fileexists - logiczna - False

public void Main() 
{ 
    string folder = Dts.Variables["User::folder"].Value.ToString();  //@"C:\temp\"; 
    string file = Dts.Variables["User::file"].Value.ToString();   //"a.txt"; 
    string fullPath = string.Format(@"{0}\{1}", folder, file); 

    Dts.Variables["User::fileExists"].Value = File.Exists(fullPath); 

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

Próbowałem powyższej odpowiedzi, ale otrzymałem błąd podczas uruchamiania ssis w naszym środowisku. Wyjątek został zgłoszony przez docelowe wywołanie. – user2756589

+0

Upewnij się, że te zmienne są przekazywane do skryptu; folder i plik jako ReadOnly, fileExists jako ReadWrite –

1

Zamiast alternatywy dla zmiennej wyjściowej, można również zmienić wartość Dts.TaskResult na podstawie tego, czy plik istnieje, czy nie. Poniższy fragment kodu kończy się niepowodzeniem zadania skryptu, jeśli plik nie istnieje. (Tworzy również wpis w dzienniku, jeśli włączone jest rejestrowanie.)

public void Main() 
{ 
    string fileName = Dts.Variables["User::sourcePath"].Value.ToString() + Dts.Variables["User::fileName"].Value.ToString(); 

    if (File.Exists(fileName)) 
    { 
     Dts.TaskResult = (int)ScriptResults.Success; 
    } 
    else 
    { 
     Dts.Log(string.Format("File {0} was not found.",fileName),0,null); 
     Dts.TaskResult = (int)ScriptResults.Failure; 
    } 

} 
4

Można użyć Foreach Loop Container i po prostu umieścić wszystkie swoje rzeczy do niego. Zostanie wykonany, jeśli plik istnieje i nie będzie, jeśli nie. Bardzo proste :)

+0

Very nice! Szukałem czegoś prostego i łatwego do wdrożenia, a to działa dobrze. – Vladimir