A.exeでB.exeを呼び出してREADファイルとWRITEファイルのパスを引数で渡し、
B.exeでREADファイルの内容を読み込みその内容をWRITEファイルに書き出すプログラムを書いています。
しかし、読み込みはうまくいくのですが、書き出しの際にStreamWriterの部分でエラーが出てしまいます。
エラーの位置は try-catch文と consoleへの出力で確認しました。
呼び出し先の実行ファイルのエラー内容の確認の仕方がわからなかったので、
B.exe単体でやってみたところエラーが出ませんでした。
どこかやり方を間違えているのでしょうか?
お知恵をお貸しください。
A.exe
1namespace _10test 2{ 3 public partial class Form1 : Form 4 { 5 string time = DateTime.Now.ToString("yyyyMMddhhmmss"); 6 string ExePath = @"......\10test\bin\Debug\WindowsFormsApp3.exe"; 7 8 private void BtnCreateCSV_Click(object sender, EventArgs e) 9 { 10 string nowtime = time; 11 string InportPath = @"......\100000testMakeCSV\csv\InportFile\" + nowtime + ".csv"; 12 string ExportPath = @"......\100000testMakeCSV\csv\ExportFile\" + nowtime + ".csv"; 13 14 Writecsv(InportPath); // 読み込みファイルの作成 15 Exe(InportPath, ExportPath); 16 } 17 18 19 20 void Exe(string Inport, string Export) 21 { 22 File.Create(Export); 23 Process csvProcess = Process.Start(ExePath, Inport + " " + Export); 24 csvProcess.WaitForExit(); 25 } 26 } 27}
B.exe
1namespace WindowsFormsApp3 2{ 3 static class Program 4 { 5 [STAThread] 6 static void Main(string[] args) 7 { 8 Application.EnableVisualStyles(); 9 Application.SetCompatibleTextRenderingDefault(false); 10 FrmMain main = new FrmMain(); 11 12 if (args.Length != 2) 13 { 14 return; 15 } 16 try 17 { 18 main.InportCSV(args[0]); 19 main.ExportCSV(args[1]); 20 } 21 catch (Exception) 22 { 23 return; 24 } 25 return; 26 } 27 } 28}
B.exe
1namespace WindowsFormsApp3 2{ 3 public partial class FrmMain : Form 4 { 5 public void InportCSV(string Inport) 6 { 7 if (File.Exists(Inport)) 8 { 9 DGVtable.Rows.Clear(); 10 StreamReader csvFile = new StreamReader(Inport, Encoding.GetEncoding("shift-jis")); 11 do 12 { 13 //データの読み込み 14 } while (csvFile.Peek() != -1); 15 csvFile.Close(); 16 } 17 } 18 19 public void ExportCSV(string Export) 20 { 21 int rowCount = DGVtable.Rows.Count; 22 StreamWriter csvFile = new StreamWriter(Exportcsvpath); //ここで止まります 23 24 for (int i = 0; i < rowCount; i++) 25 { 26 //データの書き込み 27 } 28 csvFile.Close(); 29 Console.ReadKey(); 30 } 31 } 32} 33
エラーメッセージを読んでみてください。
エラーが出るならエラーメッセージを提示しましょう
エラーメッセージは省略、翻訳しないでそのままコピペで提示しましょう
すみません、catchでエラー消していたのを忘れてて、
呼び出した実行ファイルのエラー文は出ないものだと思ってました。
catchを消して実行したらエラーが出てきました。
”File.Create(Export)”で作成したファイルを開きっぱなしで
B.exe実行したら使用中でアクセスできないと出てきました。
”File.Create(Export).Dispose” で解放したら治りました。。。
早とちりですみませんでした。。。
回答しようとしましたが、確かにヒントで十分かもしれませんね。あえて追加のヒントは、「Windowsでは通常、開いたままのファイルへは書き込みできません。」
その結果を回答に書いてBAつけて自己解決としてください
ありがとうございましたm(_ _)m
回答1件
あなたの回答
tips
プレビュー