System.Windows.Forms.SaveFileDialog将FileName设置为没有路径的文件标题。为什么?

时间:2012-08-14 08:07:23

标签: c# .net savefiledialog

我看到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”,但没有任何有关路径的信息。有人在他的软件中看到了这个问题吗?有没有想法如何解决它?

3 个答案:

答案 0 :(得分:1)

documentation of 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();
   }
}

答案 1 :(得分:0)

FileName将包含文件的文件名。如果您想要文件 path ,可以使用:

FileInfo fileInfo = new FileInfo(saveFileDialog.FileName);
fileInfo.DirectoryName //Full path to file

答案 2 :(得分:-3)

对话框返回的文件名应为完整文件名,包括路径。也许你得到的是相对路径而不是绝对路径,但我不确定为什么会出现这种情况。我在本地测试了这个,每次都看到完整的路径。

但是,还有一些其他方法可能会有所帮助:SaveFileDialog类有一个名为OpenFile的方法,您可以使用该方法创建文件并返回Stream以供您写入:

var dlg = new SaveFileDialog();
if (dlg.ShowDialog() == DialogResult.OK)
{
    using (var stream = dlg.OpenFile())
    {
        // save here!
    }
}