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