0

既存のフォームから派生したフォームがあります。既存のフォームは完全に機能します。新しいフォームを開こうとすると (初めて)、デザイナーからエラーが表示されます。

デザイナをロードする前にデータが失われる可能性を防ぐには、次のエラーを解決する必要があります。

パス「C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Logs\eventlog.dat」へのアクセスが拒否されました。

このファイルは存在しません。コールスタックを見ると、さらに奇妙になります。派生元のフォームのコンストラクターには、ログ ファイルを作成するクラスがあります。

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at MeterView.MVLogger..ctor() in C:\Users\glevenson\Documents\Visual Studio 2010\Projects\MeterView\MeterView\MVDataLogger.cs:line 67
at MeterView.MVLogger.get_Instance() in C:\Users\glevenson\Documents\Visual Studio 2010\Projects\MeterView\MeterView\MVDataLogger.cs:line 79
at MeterView.frmSingle..ctor() in C:\Users\glevenson\Documents\Visual Studio 2010\Projects\MeterView\MeterView\frmSingle.cs:line 167 

実際にはディレクトリとログファイルを作成する行コードを参照していますが、アプリケーションの現在のディレクトリからです。これはまったく意味がありません。

存在しないファイルに関する警告が生成されるのはなぜですか? また、デザイナーで何もできないのはなぜですか? 現時点では、このため、私は水中で完全に死んでいます。

アドバイスをありがとう。

4

3 に答える 3

2

ここであなたが犯している2つの間違い。1 つ目は、ファイルのフル パス名を指定しないことです。「eventlog.dat」を指定するだけで、ログファイルを作成/開いています。デフォルトの作業ディレクトリが希望する場所に設定されていない場合、これはうまくいきません。確かに、デザインモードでは満足できる場所には設定されていません。プロジェクトを出荷した後は正しく設定され、c:\program ファイルのサブディレクトリに書き込むことはできません。Environment.GetFolderPath() を使用して、書き込み可能な AppData パスを選択する必要があります。

2 番目の間違いは、このコードをデザイン モードで実行できるようにすることです。これを防ぐには、DesignMode プロパティを使用します。

于 2012-09-27T15:18:22.580 に答える
0

あなたが持っているものに基づいたワイルドな推測ですが、Visual Studio を知っているので、ここに私の推測があります (コメントでうまくフォーマットされていないので、神々、許してください):

  1. MVDataLogger適切な初期化が行われていないため、クラスに問題があります
  2. MVDataLogger「Logs\eventlog.dat」というファイルの読み込み/読み取り/書き込みを試みます
  3. MVDataLoggerファイル/ディレクトリを開く前に存在することを確認していません。

これらの項目を修正すると、問題が解決すると思います。

于 2012-09-27T14:49:49.893 に答える