Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在WFP C#项目中选择保存文件的文件夹?_C#_Wpf - Fatal编程技术网

如何在WFP C#项目中选择保存文件的文件夹?

如何在WFP C#项目中选择保存文件的文件夹?,c#,wpf,C#,Wpf,此代码将我的文件保存到imgPath中写入的目录中,然后资源管理器打开,无法选择文件夹并将此文件重新保存在该目录中,如何选择文件夹???请尝试以下代码: 使用系统; 使用System.Collections.Generic; 使用System.IO; 使用System.Linq; 使用System.Runtime.CompilerServices; 使用System.Runtime.InteropServices; 使用System.Runtime.InteropServices.ComType

此代码将我的文件保存到imgPath中写入的目录中,然后资源管理器打开,无法选择文件夹并将此文件重新保存在该目录中,如何选择文件夹???

请尝试以下代码:

使用系统;
使用System.Collections.Generic;
使用System.IO;
使用System.Linq;
使用System.Runtime.CompilerServices;
使用System.Runtime.InteropServices;
使用System.Runtime.InteropServices.ComTypes;
静态类在资源管理器中显示
{
[旗帜]
内部枚举SHCONT:ushort
{
SHCONTF_检查_子项=0x0010,
SHCONTF_文件夹=0x0020,
SHCONTF_非折叠=0x0040,
SHCONTF_INCLUDEHIDDEN=0x0080,
SHCONTF_INIT_ON_FIRST_NEXT=0x0100,
SHCONTF_NetPrinterSCH=0x0200,
SHCONTF_可共享=0x0400,
SHCONTF_存储器=0x0800,
SHCONTF_导航_枚举=0x1000,
SHCONTF_FASTITEMS=0x2000,
SHCONTF_平面列表=0x4000,
SHCONTF_ENABLE_ASYNC=0x8000
}
[ComImport,
Guid(“000214E6-0000-0000-C000-0000000000 46”),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown),
ComConversionLoss]
内部接口文件夹
{
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
void ParseDisplayName(IntPtr hwnd,[In,marshallas(UnmanagedType.Interface)]IBindCtx pbc,[In,marshallas(UnmanagedType.LPWStr)]字符串pszDisplayName,[Out]Out]Out-uint-pchEaten,[Out]Out-IntPtr-ppidl,[In,Out]ref-uint-pdwAttributes);
[信号]
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
int EnumObjects([In]IntPtr hwnd,[In]SHCONT grfFlags,[marshallas(UnmanagedType.Interface)]out IEnumIDList ppenumIDList);
[信号]
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
int BindToObject([In]IntPtr-pidl[In,marshallas(UnmanagedType.Interface)]IBindCtx-pbc[In]ref-Guid-riid[Out,marshallas(UnmanagedType.Interface)]Out-IShellFolder-ppv);
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
void BindToStorage([In]ref IntPtr pidl、[In,marshallas(UnmanagedType.Interface)]IBindCtx pbc、[In]ref Guid riid,out IntPtr ppv);
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
void compareID([In]IntPtr lParam,[In]ref IntPtr pidl1,[In]ref IntPtr pidl2);
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
void CreateViewObject([In]IntPtr hwndOwner,[In]ref Guid riid,out IntPtr ppv);
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
void GetAttributesOf([In]uint cidl、[In]IntPtr apidl、[In,Out]ref uint rgfInOut);
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
无效GetUIObjectOf([In]IntPtr hwndOwner、[In]uint cidl、[In]IntPtr apidl、[In]ref Guid riid、[In,Out]ref uint rgfReserved、Out IntPtr ppv);
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
void GetDisplayNameOf([In]ref IntPtr pidl,[In]uint uFlags,out IntPtr pName);
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
void SetNameOf([In]IntPtr hwnd,[In]ref IntPtr pidl,[In,marshallas(UnmanagedType.LPWStr)]字符串pszName,[In]uint uFlags,[Out]IntPtr ppidlOut);
}
[ComImport,
Guid(“000214F2-0000-0000-C000-0000000000 46”),
InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
内部接口IEnumIDList
{
[信号]
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
int Next(uint celt、IntPtr rgelt、out uint PCELTECTED);
[信号]
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
整数跳过([In]uint-celt);
[信号]
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
int重置();
[信号]
[MethodImpl(MethodImplOptions.InternalCall,MethodCodeType=MethodCodeType.Runtime)]
int Clone([Marshallas(UnmanagedType.Interface)]out IEnumIDList ppenum);
}
类本地方法
{
静态只读int pointerSize=Marshal.SizeOf(typeof(IntPtr));
[DllImport(“ole32.dll”,EntryPoint=“CreateBindCtx”)]
公共静态外部int CreateBindCtx_uint(保留int,out-IBindCtx-ppbc);
公共静态IBindCtx CreateBindCtx()
{
IBindCtx结果;
Marshal.ThroweExceptionForHR(CreateBindCtx_0,输出结果));
返回结果;
}
[DllImport(“shell32.dll”,EntryPoint=“SHGetDesktopFolder”,CharSet=CharSet.Unicode,SetLastError=true)]
静态extern int SHGetDesktopFolder_u2;([Marshallas(UnmanagedType.Interface)]输出IShellFolder ppshf);
公共静态IShellFolder SHGetDesktopFolder()
{
ISHELL文件夹结果;
Marshal.ThroweExceptionForHR(SHGetDesktopFolder_U2;(输出结果));
返回结果;
}
[dlliport(“shell32.dll”,EntryPoint=“SHOpenFolderAndSelectItems”)]
静态extern int shopenfolder和selectItems_(
[In]IntPtr-pidlFolder,uint-cidl,[In,可选,marshallas(UnmanagedType.LPArray)]IntPtr[]apidl,int-dwFlags
);
public static void shopenfolder和selectitems(IntPtr pidlFolder、IntPtr[]apidl、intdwflags)
{
var cidl=(apidl!=null)?(uint)apidl.Length:0U;
var结果=NativeMethods.ShopEnfolder和SelectItems(pidlFolder、cidl、apidl、dwFlags);
Marshal.ThroweExceptionForHR(结果);
}
[DllImport(“shell32.dll”,CharSet=CharSet.Unicode)]
公众的
private void btn_Save_Click(object sender, RoutedEventArgs e)
    {
        string imgPath = @"C:\Temp\image.gif"; //Where file saves to

        string argument = "/select, \"" + imgPath + "\"";

        System.Diagnostics.Process.Start("explorer.exe", argument);

        MemoryStream ms = new MemoryStream();  //Memory stream :)
        FileStream fs = new FileStream(imgPath, FileMode.Create); //  File stream :)

        //rtb - the object of RenderTargetBitmap class
        RenderTargetBitmap rtb = new RenderTargetBitmap((int)InkCanvas1.Width, (int)InkCanvas1.Height, 96, 96, PixelFormats.Default);
        rtb.Render(InkCanvas1);

        GifBitmapEncoder gifEnc = new GifBitmapEncoder(); //saving a file in GIF
        gifEnc.Frames.Add(BitmapFrame.Create(rtb));
        gifEnc.Save(fs);
        fs.Close();
        MessageBox.Show("THE FILE HAS BEEN SAVED, " + imgPath);
    }
var dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "image.gif"; 
dlg.DefaultExt = ".gif"; 
dlg.Filter = "GIF files (.gif)|*.gif"; 
// `ShowDialog` returns a bool?
if(dlg.ShowDialog()==true)
{
    using(var fs=dlg.OpenFile())
    {
        var rtb = new RenderTargetBitmap((int)InkCanvas1.Width, (int)InkCanvas1.Height, 96, 96, PixelFormats.Default);
        rtb.Render(InkCanvas1);

        vargifEnc = new GifBitmapEncoder(); //saving a file in GIF
        gifEnc.Frames.Add(BitmapFrame.Create(rtb));
        gifEnc.Save(fs);
    }
    MessageBox.Show($"THE FILE HAS BEEN SAVED, {dlg.FileName}");
}
if(dlg.ShowDialog()==true)
{
    var fileName=Path.ChangeExtension(dlg.FileName,".gif");
    using(var fs=File.Open(fileName))
    {
        ...
    }
    MessageBox.Show($"THE FILE HAS BEEN SAVED, {fileName}");
}