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,您可以使用它来创建文件并返回 aStream供您写入:

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