C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

デスクトップアプリでの保存エラー

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■95473 / inTopicNo.1)  デスクトップアプリでの保存エラー
  
□投稿者/ Visual C#初心者 (15回)-(2020/08/05(Wed) 00:21:24)

分類:[C#] 

Visual C#でデスクトップアプリ(WPF)を作成し,イベントハンドラ操作時に
xmlファイルを保存させています.(Windows10 64bit)

Visual Studioのデバックでは特に問題なくファイル保存できますが,
インストーラーからインストールしたものは以下のエラーメッセージ
「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました〜」
「パス:******\settings_001_RTF.xmlへのアクセスが拒否されました」
が出てきてしまい,上のパスを開いても保存されるべきファイルが保存できていません.

恐らくパス設定に原因があると考えています.
以下はファイル保存コードです.
FileStream fs_RTF = new FileStream(Directory.GetCurrentDirectory() + "\\" + settings_RTF" + ".xml", FileMode.Create);

Directory.GetCurrentDirectory()から,
実行ファイルが置かれているフォルダに保存しているので
別々にした方が良いとかありますでしょうか.
アドバイスいただけますと幸いです.


引用返信 編集キー/
■95474 / inTopicNo.2)  Re[1]: デスクトップアプリでの保存エラー
□投稿者/ とっちゃん (689回)-(2020/08/05(Wed) 00:53:42)
5■No95473 (Visual C#初心者 さん) に返信
> Visual C#でデスクトップアプリ(WPF)を作成し,イベントハンドラ操作時に
> xmlファイルを保存させています.(Windows10 64bit)
>
> Visual Studioのデバックでは特に問題なくファイル保存できますが,
> インストーラーからインストールしたものは以下のエラーメッセージ
> 「アプリケーションのコンポーネントで、ハンドルされていない例外が発生しました〜」
> 「パス:******\settings_001_RTF.xmlへのアクセスが拒否されました」
> が出てきてしまい,上のパスを開いても保存されるべきファイルが保存できていません.
>
> 恐らくパス設定に原因があると考えています.
> 以下はファイル保存コードです.
> FileStream fs_RTF = new FileStream(Directory.GetCurrentDirectory() + "\\" + settings_RTF" + ".xml", FileMode.Create);
>
> Directory.GetCurrentDirectory()から,
> 実行ファイルが置かれているフォルダに保存しているので
> 別々にした方が良いとかありますでしょうか.
> アドバイスいただけますと幸いです.
>
インストール先は、C:\Program Files (x86)\ もしくは、C:\Program Files\ のサブディレクトリではありませんか?
もしそうであれば、管理者権限を持つアカウントでなおかつ昇格した状態じゃないと
書込みができません(書込み・削除のアクセス権を持ってオープンすることができない)。

ユーザーがフォルダを選択しないのであれば、Directory.GetcurrentDirectory() を利用するのではなく、

var basePath = Path.Combine( Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData ), Application.Current.FriendlyName );
var fullPath = Path.Combine( basePath, settings_RTF ) + ".xml";

という感じで使うのがいいでしょう。

もしくは、app.config や user.config を使って管理するというやり方もあります。
fs_RTF に何を保存したいかによって変わってくるので、どういう形がいいかはわかりません。

引用返信 編集キー/
■95475 / inTopicNo.3)  Re[1]: デスクトップアプリでの保存エラー
□投稿者/ kiku (187回)-(2020/08/05(Wed) 08:38:35)
No95473 (Visual C#初心者 さん) に返信
> FileStream fs_RTF = new FileStream(Directory.GetCurrentDirectory() + "\\" + settings_RTF" + ".xml", FileMode.Create);
> Directory.GetCurrentDirectory()から,
> 実行ファイルが置かれているフォルダに保存しているので
> 別々にした方が良いとかありますでしょうか.
> アドバイスいただけますと幸いです.

そのフォルダやファイルに書き込み権限がある場合でも発生するのであるならば、
exeのパスと、カレントディレクトリが一致しないのかもしれません。
Directory.GetCurrentDirectory()をログ出力して確認すればすぐにわかると思います。

exeのパスを取得する方法は下記が参考になると思います。
https://dobon.net/vb/dotnet/vb6/apppath.html
引用返信 編集キー/
■95515 / inTopicNo.4)  Re[2]: デスクトップアプリでの保存エラー
□投稿者/ Visual C#初心者 (16回)-(2020/08/11(Tue) 16:23:30)
No95475 (kiku さん) に返信
> ■No95473 (Visual C#初心者 さん) に返信
>>FileStream fs_RTF = new FileStream(Directory.GetCurrentDirectory() + "\\" + settings_RTF" + ".xml", FileMode.Create);
>>Directory.GetCurrentDirectory()から,
>>実行ファイルが置かれているフォルダに保存しているので
>>別々にした方が良いとかありますでしょうか.
>>アドバイスいただけますと幸いです.
>
> そのフォルダやファイルに書き込み権限がある場合でも発生するのであるならば、
> exeのパスと、カレントディレクトリが一致しないのかもしれません。
> Directory.GetCurrentDirectory()をログ出力して確認すればすぐにわかると思います。
>
> exeのパスを取得する方法は下記が参考になると思います。
> https://dobon.net/vb/dotnet/vb6/apppath.html

お答えしてくださった皆様

保存先フォルダにもアクセス権限の設定が必要なのですね.
保存先の変更で対応いたします.
ありがとうございました!
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ