Odnajdywanie pliku w folderze po części jego nazwy

0

Cześć piszę aplikację do pracy która będzie po części tzw makrem. Poniżej zamieszczam kod który w połączeniu z timerem w pętli 60 sekundowej sprawdza czy na dysku istnieje plik o podanej nazwie a jeśli się znajduje to automatycznie wysyła go na domyślną drukarkę. No i działa wszystko wyśmienicie.

 
 If My.Computer.FileSystem.FileExists("D:/test/333333.pdf") Then
            Dim psi As New ProcessStartInfo
            psi.UseShellExecute = True
            psi.Verb = "print"
            psi.WindowStyle = ProcessWindowStyle.Hidden
            psi.Arguments = PrintDialog1.PrinterSettings.PrinterName.ToString() 
            psi.FileName = "D:/test/333333.pdf"
            Process.Start(psi)
End If
 

Natomiast napotkałem taki problem, że niestety pliki zapisywane będą pod różną nazwą gdzie tylko pewien numer będzie stałą wartością. Jak np. widać na przykładzie powyżej program sprawdza plik o nazwie 333333.pdf i jeśli jest w katalogu to go drukuje, natomiast docelowo pliki będą mieć w nazwie Imię i nazwisko, numer oraz dział przykładowo "Jan Kowalski-333333-Dział4B.pdf" (imię i nazwisko oraz dział będą różne tylko liczba będzie mi wiadomą).
Jak przekształcić mogę powyższy kod tak aby program nie sprawdzał dokładnej nazwy pliku ale tylko jego część.
Dodam, że funkcja My.Computer.FileSystem.FileExists odnosi się do konkretnej nazwy z dokładnym rozszerzeniem.

2

nie wiem co to za jezyk wiec napisze jak to by wygladalo w C#

string startPath = @"%userprofile%/Desktop";
string[] oDirectories = Directory.GetDirectories(startPath, ""); 

w tablicy stringow masz juz wszystkie pliki z danego folderu teraz wystarczy zrobic cos takiego

foreach (var file in oDirectories)
{
  bool contains = file.Contains("TUTAJCOTAMCHCESZ np to Twoje 33333");
  if (contains)
  {
    //zrob sobie z tym co chcesz juz. File zawiera cala sciezke do Twojego pliku
  }
} 

jak chcesz tylko z odpowiednim rozszerzeniem to do GetDirectories podajesz odpowiedni filr

0

OK będę próbował coś pokombinować z tym pod vb.net

3
seanknw napisał(a):

Cześć piszę aplikację do pracy która będzie po części tzw makrem. Poniżej zamieszczam kod który w połączeniu z timerem w pętli 60 sekundowej sprawdza czy na dysku istnieje plik o podanej nazwie a jeśli się znajduje to automatycznie wysyła go na domyślną drukarkę. No i działa wszystko wyśmienicie.

Może i działa, ale wynalazłeś koło od nowa. Użyj FileSystemWatcher: https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher(v=vs.110).aspx konkretnie zdarzenia Created: https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.created(v=vs.110).aspx

fasadin napisał(a):

nie wiem co to za jezyk wiec napisze jak to by wygladalo w C#

string startPath = @"%userprofile%/Desktop";
string[] oDirectories = Directory.GetDirectories(startPath, ""); 

w tablicy stringow masz juz wszystkie pliki z danego folderu teraz wystarczy zrobic cos takiego

foreach (var file in oDirectories)
{
  bool contains = file.Contains("TUTAJCOTAMCHCESZ np to Twoje 33333");
  if (contains)
  {
    //zrob sobie z tym co chcesz juz. File zawiera cala sciezke do Twojego pliku
  }
} 

jak chcesz tylko z odpowiednim rozszerzeniem to do GetDirectories podajesz odpowiedni filr

Kawał dobrej, nikomu niepotrzebnej roboty, bo wystarczyłoby: Directory.GetFiles(@"C:\Temp", "*33333*");.
Ale przy użyciu FileSystemWatcher takie myki nie będą potrzebne, bo informacje o każdym pliku są w argumentach zdarzenia.

0

użyłem chyba najprostszej metody z powyższych
dzięki za pomoc

 
       Dim directory = "D:\test"
        For Each filename As String In IO.Directory.GetFiles(directory, "*333333*", IO.SearchOption.AllDirectories)
            Dim psi As New ProcessStartInfo
            psi.UseShellExecute = True
            psi.Verb = "print"
            psi.WindowStyle = ProcessWindowStyle.Hidden
            psi.Arguments = PrintDialog1.PrinterSettings.PrinterName.ToString() 
            psi.FileName = filename 
            Process.Start(psi)
        Next

1 użytkowników online, w tym zalogowanych: 0, gości: 1