2009-07-18 1 views
0

VS C# 2008 SP1mciSendString не может сохранить путь к каталогу

У меня есть небольшое приложение, которое записывает и воспроизводит аудио. Однако моему приложению необходимо сохранить волновой файл в каталоге данных приложения на компьютере пользователя.

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 \ Steve \ 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 drive и D drive, он работает до тех пор, пока путь к каталогу не содержит пробела. "C:\Test.wav" и "D:\mp3\test.wav" обе произведение, но "D:\mp4 folder\test.wav" не работает.