2009-07-18 8 views
0

VS C#2008 SP1mciSendStringはディレクトリパスに保存できません

私はオーディオを録音して再生する小さなアプリケーションを作成しました。しかし、私のアプリケーションでは、waveファイルをユーザーのコンピュータ上のアプリケーションデータディレクトリに保存する必要があります。

mciSendStringは、Cスタイルの文字列をパラメータとし、8.3形式でなければなりません。しかし、私の問題は私がそれを保存することができないということです。そして、奇妙なのはいつかそれがして、時にはそれはしません。ハウバー、ほとんどの時間は失敗です。しかし、Cドライブに直接保存すると、最初はすべてが動作します。私は以下の3つの方法を使っています。私はそれが失敗したときに取得

エラー番号は、「システムに十分なディスク容量があることを確認します。ファイルが保存されていないか、または完全なネットワーク接続がある」286である任意のsuggestinsため

多くのおかげで、

[DllImport("winmm.dll",CharSet=CharSet.Auto)] 
     private static extern uint mciSendString([MarshalAs(UnmanagedType.LPTStr)] string command, 
               StringBuilder returnValue, 
               int returnLength, 
               IntPtr winHandle); 

     [DllImport("winmm.dll", CharSet = CharSet.Auto)] 
     private static extern int mciGetErrorString(uint errorCode, StringBuilder errorText, int errorTextSize); 

[DllImport("Kernel32.dll", CharSet=CharSet.Auto)] 
     private static extern int GetShortPathName([MarshalAs(UnmanagedType.LPTStr)] string longPath, 
                [MarshalAs(UnmanagedType.LPTStr)] StringBuilder shortPath, 
                int length); 






// Stop recording 
     private void StopRecording() 
     { 
      // Save recorded voice 
      string shortPath = this.shortPathName(); 
      string formatShortPath = string.Format("save recsound \"{0}\"", shortPath); 
      uint result = 0; 
      StringBuilder errorTest = new StringBuilder(256); 

      // C:\DOCUME~1\Steve\APPLIC~1\Test.wav 
      // Fails 
      result = mciSendString(string.Format("{0}", formatShortPath), null, 0, IntPtr.Zero); 
      mciGetErrorString(result, errorTest, errorTest.Length); 

      // command line convention - fails 
      result = mciSendString("save recsound \"C:\\DOCUME~1\\Steve\\APPLIC~1\\Test.wav\"", null, 0, IntPtr.Zero); 
      mciGetErrorString(result, errorTest, errorTest.Length);   

      // 8.3 short format - fails 
      result = mciSendString(@"save recsound C:\DOCUME~1\Steve\APPLIC~1\Test.wav", null, 0, IntPtr.Zero); 
      mciGetErrorString(result, errorTest, errorTest.Length); 

      // Save to C drive works everytime. 
      result = mciSendString(@"save recsound C:\Test.wav", null, 0, IntPtr.Zero); 
      mciGetErrorString(result, errorTest, errorTest.Length); 

      mciSendString("close recsound ", null, 0, IntPtr.Zero); 
     } 


// Get the short path name so that the mciSendString can save the recorded wave file 
     private string shortPathName() 
     { 
      string shortPath = string.Empty; 
      long length = 0; 
      StringBuilder buffer = new StringBuilder(256); 

      // Get the length of the path 
      length = GetShortPathName(this.saveRecordingPath, buffer, 256); 

      shortPath = buffer.ToString(); 

      return shortPath; 
     } 

答えて

1

はこれを試してみてください。

[ 文字列directoryString = "C:\ DOCUME〜1 \スティーブ\ APPLIC〜1 \"; Directory.SetCurrentDirectory(directoryString); mciSendString(@ "save recsound Test.wav"、null、0、IntPtr.Zero); mciSendString( "close recsound"、null、0、IntPtr.Zero); ]

+0

ありがとう、私はそれを試してみましょう。 – ant2009

2

C driveD driveでテストしますが、ディレクトリパスに空白が含まれていない限り動作します。 "C:\Test.wav""D:\mp3\test.wav"はどちらも動作しますが、"D:\mp4 folder\test.wav"は機能しません。

関連する問題