質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.46%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

1回答

1243閲覧

C#でファイル操作の手直しをしています

Okachan

総合スコア9

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2021/12/10 04:02

編集2021/12/10 04:21

前提・実現したいこと

ファイル操作についてです。
先ほど作ったプログラムが汚く、ソースが長いので書き直そうとしています。
(「別プロセスでの使用されていてアクセスできません」でよく引っ掛かりこのような汚いコードになってしまいました...)
追記:
尚、現在はエラーは発生しておらず、Test_Memo_Windowで、
Create_Memo_Windowのwindow2.memo.Text = streamReader.ReadToEnd();にあたる部分を製作中です.

該当のソースコード

C#

1 private void Create_Memo_Window(string path) 2 { 3 Window2 window2 = new Window2(path); 4 //子windowのタイトル名 5 window2.Title = sY.ToString() + "/" + sM.ToString() + "/" + array_day[clPoint_y, clPoint_x]; 6 7 //ファイル処理 8 //もしなければ.txtを作り開く 9 if (!File.Exists(path)) 10 { 11 FileStream fileStream = new FileStream(path, FileMode.Create, FileAccess.ReadWrite); 12 fileStream.Close(); 13 //File.Create(path); 14 } 15 //ファイルが存在した場合ファイルの中身を読み込む 16 else if (File.Exists(path)) 17 { 18 //txt内の文字を読み取り,表示させる 19 StreamReader streamReader = new StreamReader(path, Encoding.GetEncoding("Shift_JIS")); 20 window2.memo.Text = streamReader.ReadToEnd(); 21 streamReader.Close(); 22 } 23 //出力する 24 window2.ShowDialog(); 25 }

のソースを

C#

1 private void Test_Memo_Window(string path) 2 { 3 Window2 window2 = new Window2(path); 4 //子windowのタイトル名 5 window2.Title = sY.ToString() + "/" + sM.ToString() + "/" + array_day[clPoint_y, clPoint_x]; 6 7 using (FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 8 { 9 //txt内の文字を読み取り,表示させる 10 11 } 12 //出力する 13 window2.ShowDialog(); 14 }

に直したいです。
以下は子ウインドウの一部処理です。

C#

1 private static string win1_path = "test"; 2 public Window2(string p_path) 3 { 4 InitializeComponent(); 5 win1_path = p_path; 6 7 } 8 9 private void Saving_Memo() 10 { 11 //テキストの値を取得 12 string textValue = memo.Text; 13 //パスを取得 14 string path = win1_path; 15 //書き込む設定 16 StreamWriter streamWriter = new StreamWriter(path, false, Encoding.GetEncoding("Shift_JIS")); 17 //文字列データを書き込む 18 streamWriter.Write(textValue); 19 streamWriter.Close(); 20 21 MessageBox.Show("保存しました"); 22 } 23 24 25 26 private void Save_MenuItem_Click(object sender, RoutedEventArgs e) 27 { 28 Saving_Memo(); 29 }

試したこと

・(ほぼわかりきっていましたが)usingブロック内にStreamReaderを入れ込んだところ別プロセスで使用されていますと表示されました。
・fileStream.Readも行ってみましたが、fileStream.Read(0, path.Length);の0の前と文字コードの指定方法が分かりませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10
Visual Studio 2019 16.2.5
WPFアプリ
.NET Framework 4.7.2

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

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

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

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

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

BluOxy

2021/12/10 04:20 編集

「別プロセスでの使用されていてアクセスできません」が発生する原因によってはコードをいくら直してもそのエラーは無くせません。どのプロセスがそのファイルを開いているのでしょうか。(そのWindows Formsのアプリを終了してもプロセスが残っているのでしょうか)
Okachan

2021/12/10 04:17

現在はそれらの原因を取り除きエラーがない状態です。 //File.Create(path); を使用しているときには起きていました。 なので、Test_Memo_Windowではファイルを開けるものの、 window2.memo.Text = streamReader.ReadToEnd(); にあたる部分が書けなく困っています。 このことについて質問内容を書き直したほうがよいのであれば、どのよう修正すればいいのかわからないのでご教授いただければ幸いです。
BluOxy

2021/12/10 04:22

状況はわかりました。現在の状況を質問に追記していただければ質問を見る他のユーザーは困らないかと思います。
guest

回答1

0

ベストアンサー

コードを書き直したい件については

もしなければ.txtを作り開く
ファイルが存在した場合ファイルの中身を読み込む

が要件で、かつ using を使って書き直したいということで間違いないなら、下記のように using を追加してあげればよいかと思います。

C#

1using(var fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite)) 2using(var streamReader = new StreamReader(fileStream, Encoding.GetEncoding("Shift_JIS"))) 3{ 4 window2.memo.Text = streamReader.ReadToEnd(); 5}

投稿2021/12/10 04:22

BluOxy

総合スコア2663

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

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

Okachan

2021/12/10 04:29

ありがとうございます。 コードがかなり見やすくなり、すっきりしました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問