나는 C#에서 wpf 응용 프로그램을 개발 중입니다. 다음 exe 파일을 실행할 수 있습니다..exe를 실행하여 특정 폴더에 출력을 생성하는 방법
public static void GenerateCsvFile(string fileName)
{
System.Diagnostics.Process process = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo.FileName = @"C:\ndfd\degrib\bin\degrib.exe";
startInfo.Arguments = fileName + " -C -msg 1 -Csv";
process.StartInfo = startInfo;
process.Start();
System.Diagnostics.Process process1 = new System.Diagnostics.Process();
System.Diagnostics.ProcessStartInfo startInfo1 = new System.Diagnostics.ProcessStartInfo();
startInfo1.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
startInfo1.FileName = @"C:\ndfd\degrib\bin\degrib.exe";
startInfo1.Arguments = fileName + " -C -msg all -nMet -Csv";
process1.StartInfo = startInfo1;
process1.Start();
}
위의 코드는 나를위한 csv 파일을 성공적으로 생성합니다. 그러나 .csv 파일은 fileName에 따라 다른 위치에 생성됩니다. .csv 파일은 매번 다른 폴더에서 생성된다는 의미입니다. exe 강제로 특정 폴더에 .csv 파일을 생성 할 수 있습니까? 위의 문제를 해결할 수있는 코드 나 링크를 제공해 주시겠습니까?
편집 : 사용자가 zip 파일을 선택하고 양식을 확인합니다. App.ApplicationPath는 하드 코딩 된 경로입니다. 다음은 위의 코드에서
private void ShowPointsButton_Click(object sender, RoutedEventArgs e)
{
ZipHelper.UnZip(FileNameTextBox.Text, App.ApplicationPath, safeFileName, 9999999);
}
public static void UnZip(string SrcFile, string DstFile, string safeFileName, int bufferSize)
{
//ICSharpCode.SharpZipLib.Zip.UseZip64.Off;
FileStream fileStreamIn = new FileStream(SrcFile, FileMode.Open, FileAccess.Read);
ZipInputStream zipInStream = new ZipInputStream(fileStreamIn); ;
//if (SrcFile.Contains(".bz2"))
//{
//BZip2InputStream zipInStream = new BZip2InputStream(fileStreamIn);
//}
//else
//{
// zipInStream = new ZipInputStream(fileStreamIn);
//}
string rootDirectory = string.Empty;
if (safeFileName.Contains(".zip"))
{
rootDirectory = safeFileName.Replace(".zip", string.Empty);
}
else
{
rootDirectory = safeFileName;
}
Directory.CreateDirectory(App.ApplicationPath + rootDirectory);
while (true)
{
ZipEntry entry = zipInStream.GetNextEntry();
if (entry == null)
break;
if (entry.Name.Contains("/"))
{
string[] folders = entry.Name.Split('/');
string lastElement = folders[folders.Length - 1];
var folderList = new List<string>(folders);
folderList.RemoveAt(folders.Length - 1);
folders = folderList.ToArray();
//string folderPath = "";
//foreach (string str in folders)
//{
//folderPath = folderPath + @"\" + str;
//string blackslash = folderPath.Substring(0, 1);
//if (blackslash == "\\")
//{
// folderPath = folderPath.Remove(0, 1);
//}
//if (!Directory.Exists(App.ApplicationPath + rootDirectory + "/" + folderPath))
//{
// Directory.CreateDirectory(App.ApplicationPath + rootDirectory + "/" + folderPath);
//}
//}
if (!string.IsNullOrEmpty(lastElement))
{
//folderPath = folderPath + @"\" + lastElement;
//string blackslash = folderPath.Substring(0, 1);
//if (blackslash == "\\")
//{
// folderPath = folderPath.Remove(0, 1);
//}
WriteToFile(DstFile + rootDirectory + @"\" + lastElement, bufferSize, zipInStream, rootDirectory, entry);
}
}
else
{
WriteToFile(DstFile + rootDirectory + @"\" + entry.Name, bufferSize, zipInStream, rootDirectory, entry);
}
}
zipInStream.Close();
fileStreamIn.Close();
}
private static void WriteToFile(string DstFile, int bufferSize, ZipInputStream zipInStream, string rootDirectory, ZipEntry entry)
{
WriteFileContents(DstFile, bufferSize, zipInStream);
if (DstFile.Contains(".grb"))
{
Utility.GenerateCsvFile(DstFile);
}
//if(DstFile.Contains(".csv"))
//{
// WriteFileContents(@"D:\Documents" + rootDirectory + @"\" + entry.Name, bufferSize, zipInStream);
//}
}
private static void WriteFileContents(string DstFile, int bufferSize, ZipInputStream zipInStream)
{
FileStream fileStreamOut = new FileStream(DstFile, FileMode.OpenOrCreate, FileAccess.Write);
int size;
byte[] buffer = new byte[bufferSize];
do
{
size = zipInStream.Read(buffer, 0, buffer.Length);
fileStreamOut.Write(buffer, 0, size);
} while (size > 0);
fileStreamOut.Close();
}
라인 Utility.GenerateCsvFile (DstFile)에서 참조 내 코드입니다; 위치 'DstFile'에서 .csv 파일을 생성하고 싶습니다. 간단히 말해서 .exe 파일에서 .csv 파일을 쓰고 싶을 때 같은 폴더에 파일을 압축 해제하는 폴더입니다. 예를 들어 내 zip 파일의 압축을 풀고있는 D :/XYZ 폴더가 있다고 가정합니다. 이 폴더에는 test.grib 파일이 있습니다. test.grib에 대해 exe를 실행하고 .csv 파일을 생성하려고합니다. 이 .csv 파일을 XYZ 폴더에 쓰길 원합니다.
어떤 DstFile을 의미합니까? 'DstFile' 매개 변수는'UnZip'으로 전달됩니다.이 때'App.ApplicationPath'가됩니다. 이 매개 변수는'WriteToFile'에 전달되기 전에 수정됩니다. 정확히 어디에서 일이 잘못됩니까? –
@ NickW. 모든 것이 잘 작동합니다. 내 문제는 함수입니다 Utility.GenerateCsvFile (DstFile); 위의 코드에서 DstFile은 D : \ Projects \ ApiRouting \ ApiRouting \ Files 경로입니다. 이 경로에서 .exe를 실행 한 후 .csv 파일을 생성해야합니다. 그러나 다른 폴더에서 생성됩니다. –
현재 전달되는 것보다 다른 값의'DstFile'을 해당 메서드에 전달하려고합니다. –