我正在用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文件嗎?你能否給我提供任何可以解決上述問題的代碼或鏈接?
編輯:用戶選擇壓縮文件並sumbit表單。 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值給該方法的問題比當前正在傳遞的問題還要嚴重嗎? –