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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

11173閲覧

エラーをなくしたいので協力お願いします。

Gakuseitasukete

総合スコア16

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

1グッド

1クリップ

投稿2018/12/26 09:35

前提・実現したいこと

Logは残せるのですがエラーが発生しています。
どのようなエラーか把握できません。

発生している問題・エラーメッセージ

IOException: Sharing violation on path C:\Users\surfa\Desktop\New Unity Project 9\Assets\Log\hannteiLog\hanntei00.csv System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/FileStream.cs:320) System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share) (wrapper remoting-invoke-with-check) System.IO.FileStream:.ctor (string,System.IO.FileMode,System.IO.FileAccess,System.IO.FileShare) System.IO.FileInfo.Open (FileMode mode, FileAccess access, FileShare share) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/FileInfo.cs:210) System.IO.FileInfo.Open (FileMode mode, FileAccess access) (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/FileInfo.cs:205) System.IO.FileInfo.AppendText () (at /Users/builduser/buildslave/mono/build/mcs/class/corlib/System.IO/FileInfo.cs:178) (wrapper remoting-invoke-with-check) System.IO.FileInfo:AppendText () hannteiLog.Update () (at Assets/hannteiLog.cs:40)

該当のソースコード

C# using UnityEngine; using System.IO; public class hannteiLog : MonoBehaviour { public Light attachedLight; public FoveInterfaceBase foveInterface; private Collider my_collider; private Material material; private bool light_attached = false; private string datetimeStr; void Start() { my_collider = GetComponent<Collider>(); if (attachedLight == null) attachedLight = transform.GetComponentInChildren<Light>(); if (attachedLight) { light_attached = true; attachedLight.enabled = false; } material = gameObject.GetComponent<Renderer>().material; if (material == null) gameObject.SetActive(false); } void Update() { StreamWriter sw; FileInfo fi; fi = new FileInfo(Application.dataPath + "/Log/hannteiLog/hanntei00.csv"); sw = fi.AppendText(); if (foveInterface.Gazecast(my_collider)) { material.EnableKeyword("_EMISSION"); if (light_attached) { material.SetColor("_EmissionColor", attachedLight.color); attachedLight.enabled = true; DynamicGI.SetEmissive(GetComponent<Renderer>(), attachedLight.color); datetimeStr = System.DateTime.Now.Year.ToString() + "." + System.DateTime.Now.Month.ToString() + "." + System.DateTime.Now.Day.ToString() + "." + System.DateTime.Now.Hour.ToString() + "." + System.DateTime.Now.Minute.ToString() + "." + System.DateTime.Now.Second.ToString() + "." + System.DateTime.Now.Millisecond.ToString(); sw.WriteLine(datetimeStr); } sw.Close(); } else { gameObject.GetComponent<Renderer>().material.color = Color.white; material.DisableKeyword("_EMISSION"); if (light_attached) { attachedLight.enabled = false; DynamicGI.SetEmissive(GetComponent<Renderer>(), Color.black); } } } }
Koopa👍を押しています

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

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

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

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

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

yukkuri

2018/12/26 10:01

このエラーについてどこまでわかっているのでしょうか。IOExceptionの内容がわからないのか、エラーが何かすらわからないのか。前者、後者ともに、調べたり考えたことを書きましょう。また、このエラーの場合はファイル構成の場合も多いので、ファイル構成と実行ディレクトリの位置も追記してください。
Gakuseitasukete

2018/12/26 10:10

エラーの最初のほうはファイルの位置かなというぐらいしかわかっていません。 調べても英語なので理解できませんでした。 New Unity Project 9\Assets\Log\hannteiLog\hanntei00.csv Assetsの中にunityのプログラムがあります。
guest

回答1

0

以下のケースを通った際にswがクローズされないので、再実行すると例外が発生しているのでは?

else { gameObject.GetComponent<Renderer>().material.color = Color.white; material.DisableKeyword("_EMISSION"); if (light_attached) { attachedLight.enabled = false; DynamicGI.SetEmissive(GetComponent<Renderer>(), Color.black); } }

コード記述アドバイスするならば、「sw.Close();」は使用しないで以下のサンプルのように記述する事で、コード内で例外が発生しても確実にファイルがクローズされるのでよいと思います。

 using var sw = new StreamWriter(@"C:\test\1.txt", true, エンコード) { //ここにコードを記述する }

投稿2018/12/26 10:13

kinkin334

総合スコア62

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

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

Gakuseitasukete

2018/12/26 10:23

Updateの内容を記述するということですか?
Gakuseitasukete

2018/12/26 10:24

すみません。簡単に理解できなくて
kinkin334

2018/12/26 11:14

''''  using var sw = new StreamWriter(@"C:\test\1.txt", true, エンコード) { //ここにコードを記述する } ''' 上記のコードはswのインスタンス作成から、ファイルのオープン、ファイルのクローズ、棄却までの全て制御してくれるので、とても便利です。 using句のカッコないにif文を入れ込めば良いと思います。その際にsw.close()の記述は不要です。
Gakuseitasukete

2019/01/07 04:10

正月休みでいま確認しました。 やってみたいと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問