OSDN Git Service

#24746 DTXC: a countermeasure for temp-flooding.
authoryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 31 Mar 2011 17:40:36 +0000 (17:40 +0000)
committeryyagi <yyagi@16f42ceb-6dc6-49c8-ba94-f2d53467949d>
Thu, 31 Mar 2011 17:40:36 +0000 (17:40 +0000)
git-svn-id: http://svn.osdn.jp/svnroot/dtxmania/trunk@147 16f42ceb-6dc6-49c8-ba94-f2d53467949d

DTXCreatorプロジェクト/コード/00.全体/Cメインフォーム.cs
DTXCreatorプロジェクト/コード/00.全体/MakeTempDTX.cs [new file with mode: 0644]

index bb50fb4..71afb7a 100644 (file)
@@ -51,6 +51,8 @@ namespace DTXCreator
                internal CUndoRedo管理 mgrUndoRedo管理者 = null;\r
                internal Cクリップボード cbクリップボード = null;\r
 \r
+               internal MakeTempDTX makeTempDTX = null;\r
+\r
                public bool b選択モードである\r
                {\r
                        get\r
@@ -191,6 +193,10 @@ namespace DTXCreator
                        //-----------------\r
                        #endregion\r
 \r
+                       #region [ Viewer再生用一時DTX生成オブジェクトを生成する。 ]\r
+                       makeTempDTX = new MakeTempDTX();\r
+                       #endregion\r
+\r
                        #region [ 譜面を初期化する。]\r
                        //-----------------\r
                        this.t譜面を初期化する();\r
@@ -240,6 +246,11 @@ namespace DTXCreator
                        this.mgrWAVリスト管理者.tDirectSoundの解放();\r
                        //-----------------\r
                        #endregion\r
+\r
+                       #region [ Viewer再生用一時DTX生成オブジェクトの終了処理を行う。 ]\r
+                       makeTempDTX.Dispose();\r
+                       makeTempDTX = null;\r
+                       #endregion\r
                }\r
                private void tアプリ設定の読み込み()\r
                {\r
@@ -1611,8 +1622,8 @@ namespace DTXCreator
                {\r
                        // 一時ファイル名を自動生成。\r
 \r
-                       this.strViewer演奏用一時ファイル名 = Path.GetTempFileName();\r
-                       \r
+                       //this.strViewer演奏用一時ファイル名 = Path.GetTempFileName();                        //\r
+                       this.strViewer演奏用一時ファイル名 = makeTempDTX.GetTempFileName();           // #24746 2011.4.1 yyagi add; a countermeasure for temp-flooding\r
                        \r
                        // 一時ファイルにDTXを出力。\r
 \r
diff --git a/DTXCreatorプロジェクト/コード/00.全体/MakeTempDTX.cs b/DTXCreatorプロジェクト/コード/00.全体/MakeTempDTX.cs
new file mode 100644 (file)
index 0000000..0adfa09
--- /dev/null
@@ -0,0 +1,73 @@
+using System;\r
+using System.Diagnostics;\r
+using System.Threading;\r
+using System.IO;\r
+\r
+namespace DTXCreator\r
+{\r
+       /// <summary>\r
+       /// DTXV呼び出し時にDTXファイルを%TEMP%フォルダに作成する\r
+       /// その際、直前に作ったDTXファイルを消去する\r
+       /// dispose時も消去する\r
+       /// </summary>\r
+       internal class MakeTempDTX : IDisposable                                        // #24746 2011.4.1 yyagi add; a countermeasure for temp-flooding\r
+       {\r
+               /// <summary>\r
+               /// 直前に作成したtemp dtxファイルのフルパス\r
+               /// </summary>\r
+               string lastTempFullPath;\r
+\r
+               /// <summary>\r
+               /// コンストラクタ\r
+               /// </summary>\r
+               internal void makeTempDTX()\r
+               {\r
+                       this.lastTempFullPath = null;\r
+               }\r
+\r
+               /// <summary>\r
+               /// temp dtxファイル名を作成して返す\r
+               /// その際、直前に作成したtemp dtxファイルを削除する\r
+               /// </summary>\r
+               /// <returns>temp dtxファイル名のフルパス</returns>\r
+               internal string GetTempFileName()\r
+               {\r
+                       string strTempFileName = Path.GetTempFileName();\r
+\r
+                       this.DeleteLastTempFile();\r
+                       this.lastTempFullPath = strTempFileName;\r
+                       return strTempFileName;\r
+               }\r
+\r
+               /// <summary>\r
+               /// 直前のtemp dtxファイルを削除する\r
+               /// 削除しようとしたtemp dtxファイルが見つからなかった場合も成功を返す\r
+               /// </summary>\r
+               /// <returns>true=削除成功, false=削除失敗</returns>\r
+               private bool DeleteLastTempFile()\r
+               {\r
+                       bool result = true;\r
+                       if ( lastTempFullPath != null )\r
+                       {\r
+                               try\r
+                               {\r
+                                       File.Delete( lastTempFullPath );\r
+                               }\r
+                               catch \r
+                               {\r
+                                       result = false;\r
+                               }\r
+                       }\r
+                       return result;\r
+               }\r
+               \r
+               /// <summary>\r
+               /// Dispose処理。直前のtemp dtxファイルを削除するだけ。\r
+               /// </summary>\r
+               public virtual void Dispose()\r
+               {\r
+                       DeleteLastTempFile();\r
+                       lastTempFullPath = "";\r
+               }\r
+       }\r
+}\r