Witam
Dopiero zaczynam moją naukę z C# a muszę do własnych celów napisać program, który przekonwertuje mi wszystkie pliki w danym katalogu przy użyciu programu exe, który się w tym katalogu również się znajduję.
Myślę, że powinno to wyglądać tak: Program convert.exe zostanie wywołany tyle razy ile plików znajduje się w folderze za każdym razem przyjmując inny argument; plik musi być uruchomiony tak "convert plik.dat plik.csv" gdzie plik .dat to plik do konwersji a .csv to plik po konwersji przy czym obie nazwy muszą być takie same.
Proszę o pomoc. Jest mi to niezbędne do pracy naukowej.
Czy ten program exe masz dany czy sam będziesz pisał? Jeżeli musisz skorzystać z zewn. programu to możesz go uruchomić za pomocą klasy Process:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx
Jego najprostsza metoda wywołania:
http://msdn.microsoft.com/en-us/library/h6ak8zt5.aspx
Do znalezienia plików nada się klasa Directory:
http://msdn.microsoft.com/en-us/library/system.io.directory.aspx
Na dole jest dobry przykład wykorzystania metody EnumerateFiles do wyciągania nazw plików:
using System;
using System.IO;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string sourceDirectory = @"C:\current";
try
{
var txtFiles = Directory.EnumerateFiles(sourceDirectory, "*.txt");
foreach (string currentFile in txtFiles)
{
string fileName = currentFile; //<---- ścieżka do pliku
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
}
Program mam gotowy. Jednak problem mam z ilością plików do konwersji jest ich po kilkaset w każdym katalogu, który będę oddzielnie konwertował.
A nie możesz po prostu napisać prostego batcha? :-)
Witam,
tak jak kolega napisał najlepiej skorzystać z statycznej klasy Directory i metody GetFiles ktora jako parametr przyjmuje string z adresem katalogu, jeśli ma byc to bierzacy w którym znajduje się plik wykonywalny to jak porametr podajemy
Directory.GetCurrentDirectory()
. Metoda zwraca tablicę string z adresami plików. Co do parametrów to odczytujesz je z string[] args
w metodzie Main. Można pobawić się jeszcze w storzenie kilku wątków co mogło by przyśpieszyć pracę konvertera.
Źle zrozumiałem problem.
Zamiast kombinować z nowym programem, użyj istniejące polecenie **rename .dat .csv.
@bogdans, ale tu raczej nie chodzi o to, żeby zmienić rozszerzenie plików z dat
na csv
. Chodzi o to, żeby wywołać jakiś zewnętrzny program convert.exe
na każdym z plików dat
, aby otrzymać w konsekwencji tyle samo plików csv
, które w jakiś magiczny sposób zostaną zmienione.
Chyba, że ja coś źle zrozumiałem ;-)
Masz rację, w nocy mam trudności z rozumieniem tego co czytam. To może tak: *for %z in (*.dat) do convert %z .csv.