2013-07-10 13 views
8

Voglio verificare se esiste un file in una particolare cartella da SSIS. Come posso realizzare questo?Attività Script SSIS per verificare se il file esiste nella cartella oppure no

+1

È possibile utilizzare questo come punto di partenza. http://stackoverflow.com/questions/7385251/how-to-check-if-a-file-exists-in-a-folder –

+0

Sto usando il codice sottostante Dts.Variables ("FileExists"). Value = File.Exists (Dts.Variables ("FileLocation"). Value) dove FileExists è una variabile booleana e "FileLocation" è una variabile stringa con percorso file Anche se il file è presente nella cartella, continua a fornire un valore False . – user1429135

+0

Solo curioso di sapere se la soluzione indicata di seguito ti è stata utile e se sei riuscito a risolvere il problema. Il tuo feedback sarà utile per me e anche per i futuri visitatori che hanno problemi simili. Grazie. –

risposta

9

Variabili:

cartella - stringa - C :: \ Temp \

di file - stringa - 1.txt

FileExists - booleana - 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

Ho provato la risposta sopra, ma ho riscontrato un errore durante l'esecuzione di ssis nel nostro ambiente. L'eccezione è stata lanciata dall'invocazione del target. – user2756589

+0

Assicurati che quelle variabili siano passate allo script; cartella e file come ReadOnly, fileExiste come ReadWrite –

1

In alternativa all'utilizzo di una variabile "out", è anche possibile modificare Dts.TaskResult in base alla presenza o meno del file. Lo snippet seguente non riesce l'attività di script se il file non esiste. (Inoltre, crea una voce di registro se la registrazione è abilitata.)

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

È possibile utilizzare Foreach Loop Container e semplicemente mettere tutti i tuoi oggetti in esso. Verrà eseguito se il file esiste e non lo sarà se non lo è. Molto semplice :)

+0

Molto bello! Stavo cercando qualcosa di semplice e facile da implementare e che funzioni bene. – Vladimir

Problemi correlati