0

SaveFileDialog の奇妙な動作が見られます。FileName プロパティには新しいファイルへのフルパスが含まれていると思います。そして、ファイルを保存する場所を知る方法がわかりません。ダイアログ オブジェクトのダンプは次のとおりです (ユーザーがファイルを選択した後)。

_autoUpgradeEnabled true    bool
_customPlaces   Count = 0   System.Windows.Forms.FileDialogCustomPlacesCollection
AddExtension    true    bool
AutoUpgradeEnabled  true    bool
charBuffer  null    System.Windows.Forms.UnsafeNativeMethods.CharBuffer
CheckFileExists false   bool
CheckPathExists true    bool
CustomPlaces    Count = 0   System.Windows.Forms.FileDialogCustomPlacesCollection
DefaultExt  ""  string
defaultExt  null    string
DereferenceLinks    true    bool
DialogCaption   ""  string
dialogHWnd  0   System.IntPtr
FileName    "temp.flg"  string
fileNames   {string[1]} string[]
FileNames   {string[1]} string[]
FileNamesInternal   {string[1]} string[]
Filter  "TIFF (*.tif)|*.tif|Multipage image (*.tif)|*.tif|GIF (*.gif)|*.gif|PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|Bitmap (*.bmp)|*.bmp|VASoftOnline Flow Chart (*.flg)|*.flg"    string
filter  "TIFF (*.tif)|*.tif|Multipage image (*.tif)|*.tif|GIF (*.gif)|*.gif|PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg|Bitmap (*.bmp)|*.bmp|VASoftOnline Flow Chart (*.flg)|*.flg"    string
FilterExtensions    {string[1]} string[]
filterIndex 7   int
FilterIndex 7   int
FilterItems {System.Windows.Forms.FileDialogNative.COMDLG_FILTERSPEC[7]}    System.Windows.Forms.FileDialogNative.COMDLG_FILTERSPEC[]
ignoreSecondFileOkNotification  false   bool
initialDir  null    string
InitialDirectory    ""  string
Instance    16449536    System.IntPtr
okNotificationCount 0   int
Options 2052    int
options -2147481594 int
RestoreDirectory    false   bool
securityCheckFileNames  false   bool
SettingsSupportVistaDialog  true    bool
ShowHelp    false   bool
supportMultiDottedExtensions    false   bool
SupportMultiDottedExtensions    false   bool
title   null    string
Title   ""  string
UseVistaDialogInternal  true    bool
ValidateNames   true    bool
CreatePrompt    false   bool
OverwritePrompt true    bool

パスに関する情報がなくても、ダンプで FileName = "temp.flg" を確認できます。彼のソフトウェアでその問題を見た人はいますか? それを修正する方法はありますか?

4

3 に答える 3

1

SaveFileDialogのドキュメントでは、ストリームを使用してファイルを保存する方法の例を見つけることができます。

Stream myStream ;
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"  ;
saveFileDialog1.FilterIndex = 2 ;
saveFileDialog1.RestoreDirectory = true ;
if(saveFileDialog1.ShowDialog() == DialogResult.OK)
{
   if((myStream = saveFileDialog1.OpenFile()) != null)
   {
       // Code to write the stream goes here.
       myStream.Close();
   }
}
于 2012-08-14T08:20:42.447 に答える
0

FileNameファイルのファイル名が含まれます。ファイルパスが必要な場合は、これを使用できます:

FileInfo fileInfo = new FileInfo(saveFileDialog.FileName);
fileInfo.DirectoryName //Full path to file
于 2012-08-14T08:14:02.533 に答える
-3

ダイアログが返すファイル名は、パスを含む完全なファイル名である必要があります。絶対パスではなく相対パスを取得している可能性がありますが、なぜそうなるのかはわかりません。ローカルでこれをテストしましたが、毎回完全なパスが表示されます。

ただし、他にも役立つことがあります。SaveFileDialogクラスには、ファイルを作成し、書き込むために をOpenFile返すために使用できるメソッドが呼び出されます。Stream

var dlg = new SaveFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
    using (var stream = dlg.OpenFile())
    {
        // save here!
    }
}
于 2012-08-14T08:24:03.373 に答える