🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

1150閲覧

実行ファイルの呼び出しの引数の送り方

FM88mhmh

総合スコア22

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2019/11/15 08:06

編集2019/11/15 08:08

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2019/11/15 08:09

エラーメッセージを読んでみてください。
y_waiwai

2019/11/15 08:10

エラーが出るならエラーメッセージを提示しましょう エラーメッセージは省略、翻訳しないでそのままコピペで提示しましょう
FM88mhmh

2019/11/15 08:20 編集

すみません、catchでエラー消していたのを忘れてて、 呼び出した実行ファイルのエラー文は出ないものだと思ってました。 catchを消して実行したらエラーが出てきました。 ”File.Create(Export)”で作成したファイルを開きっぱなしで B.exe実行したら使用中でアクセスできないと出てきました。 ”File.Create(Export).Dispose” で解放したら治りました。。。 早とちりですみませんでした。。。
dodox86

2019/11/15 08:21

回答しようとしましたが、確かにヒントで十分かもしれませんね。あえて追加のヒントは、「Windowsでは通常、開いたままのファイルへは書き込みできません。」
y_waiwai

2019/11/15 08:22

その結果を回答に書いてBAつけて自己解決としてください
FM88mhmh

2019/11/15 08:23 編集

ありがとうございましたm(_ _)m
guest

回答1

0

自己解決

catchをコメント化してエラーを確認したら使用中でアクセスできないと出ました。

作成したWRITEファイルをDisposeすることで治りました。

投稿2019/11/15 08:22

FM88mhmh

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問