小编fau*_*lty的帖子

如何从绝对路径获得相对路径

我的应用程序中有一部分显示用户通过OpenFileDialog加载的文件路径.它占用了太多空间来显示整个路径,但我不想只显示文件名,因为它可能不明确.所以我更喜欢显示相对于assembly/exe目录的文件路径.

例如,程序集位于"C:\ Program Files\Dummy Folder\MyProgram",文件位于"C:\ Program Files\Dummy Folder\MyProgram\Data\datafile1.dat",然后我希望它显示".\DATA\datafile1.dat".如果文件位于"C:\ Program Files\Dummy Folder\datafile1.dat"中,那么我想要"..\datafile1.dat".但是,如果文件位于根目录下或根目录下的1个目录中,则显示完整路径.

你会推荐什么解决方案?正则表达式?

基本上我想显示有用的文件路径信息而不占用太多屏幕空间.

编辑:只是为了澄清一点.此解决方案的目的是帮助用户或我自己知道我最后加载了哪个文件,大致来自哪个目录.我正在使用只读文本框来显示路径.大多数情况下,文件路径比文本框的显示空间长得多.该路径应该是提供信息的,但不足以占用更多的屏幕空间.

Alex Brault的评论很好,Jonathan Leffler也是如此.DavidK提供的Win32功能只能帮助解决部分问题,而不是整个问题,但无论如何都要感谢.至于James Newton-King的解决方案,我稍后会在我自由时试一试.

.net

168
推荐指数
9
解决办法
9万
查看次数

访问修改后的封闭(2)

这是Access到Modified Closure的问题扩展.我只是想验证以下内容是否足够安全,适合生产使用.

List<string> lists = new List<string>();
//Code to retrieve lists from DB    
foreach (string list in lists)
{
    Button btn = new Button();
    btn.Click += new EventHandler(delegate { MessageBox.Show(list); });
}
Run Code Online (Sandbox Code Playgroud)

我每次启动时都只运行一次.现在似乎工作正常.正如Jon在某些情况下提到的反直觉结果一样.那么我需要注意什么呢?如果列表不止一次运行会没问题吗?

.net c# resharper closures

101
推荐指数
1
解决办法
1万
查看次数

ArrayList vs List <object>

我看到Jon在初始化未知类型的通用对象时的回复:

但是,如果您希望单个集合包含多个不相关的值类型,则必须使用 List<object>

我不是比较ArrayListvs List<>,而是ArrayListvs List<object>,因为两者都将暴露类型的元素object.在这种情况下使用任何一个会有什么好处?

编辑:这里不关心类型安全,因为这两个类都是object作为它的项目暴露.仍然需要从object所需的类型转换.除了类型安全之外,我对其他任何事情都更感兴趣.

编辑:谢谢马克格拉维尔和肖恩的答案.对不起,我只能选1作为答案,所以我会投两票.

.net c# list arraylist

46
推荐指数
4
解决办法
3万
查看次数

使用OCX而不注册它

是否可以在winform上使用ocx(ActiveX控件)(可能以编程方式添加它),而不首先在regsrv32中注册ocx?

我想要实现的是启用xcopy安装.我有从我的开发机器生成的"AxInterop .dll"和"Interop .dll"文件.

我已经看到了在没有先注册它的情况下调用COM dll的可能性(ProSysLib,据作者说,但我还没有测试过),因为ocx也是基于COM的,所以我认为必须有一些方法来也这样做.

.net com ocx regfreecom

29
推荐指数
2
解决办法
1万
查看次数

如何使用typeof或GetType()作为Generic的模板?

如果使用单词更难解释,让我们看一个例子,我有一个像这样的泛型函数

void FunctionA<T>() where T : Form, new()
{
}
Run Code Online (Sandbox Code Playgroud)

如果我有反射类型,如何将其与上述功能一起使用?我很期待这样做

Type a = Type.GetType("System.Windows.Forms.Form");
FunctionA<a>();
Run Code Online (Sandbox Code Playgroud)

原因上述方法不起作用.

.net generics

24
推荐指数
3
解决办法
2万
查看次数

获取程序集执行目录的最佳方法是什么

对于我的应用程序,我将一些配置文件与程序集(exe)一起存储在xml中,还有一些其他临时文件用于处理目的.

".\\"和他发现了一些怪癖Application.StartupPath.

我一直在用

String configPath = ".\\config.xml";
Run Code Online (Sandbox Code Playgroud)

它工作正常,直到我打电话OpenFIleDialog打开其他文件夹中的某些文件,上面的语句失败.显然".\"指的是"CurrentDirectory",每当我们浏览到另一个文件夹时它就会改变.

在某些时候,我正在使用

String configPath = Path.Combine(Application.StartupPath + "config.xml");
Run Code Online (Sandbox Code Playgroud)

在某些时候,当我需要通过使用从另一个文件夹执行此程序集时Process.Start(),事情开始崩溃.显然工作目录设置不正确,Application.StartupPath实际上是指工作目录而不是正在执行程序集的目录,正如我所假设的那样.所以我不得不求助于使用ProcessInfo将工作目录设置到程序集的目录中.当我写VSTO时,我也有这个问题.

所以,我的问题是,什么是获得程序集正在执行的当前目录的最好,最简单和最有保证的方法,没有我刚刚提到的那些怪癖(或误解)?

编辑:我的意思是获取程序集所在的目录

编辑:根据MSDN上AppDomain.BaseDirectory,它似乎可以运行,这是我不想要的东西(我想弄清楚,不是我不想允许更改BaseDirectory,而是,当在改变我检索它而不确定它是否已被更改)

编辑:我注意到一个相关的问题早就发布了.什么会导致正在执行的应用程序的当前目录发生变化?

谢谢你的回答.

.net directory

19
推荐指数
5
解决办法
3万
查看次数

交付.Net 3.5 SP1

如果我要将.Net Framework安装文件与我的应用程序一起包含(安装过程由我们自己的技术人员完成),要安装在干净的Windows(XP SP2/SP3或Vista SP1)上,而无需事先安装任何框架,我需要按顺序安装.Net Framework设置才能获得3.5 SP1?目前我有以下设置文件:

  1. .Net 2.0
  2. .Net 2.0 SP1
  3. .Net 3.0
  4. .Net 3.5
  5. .Net 3.5 SP1

所有可再发行版本.

编辑:我需要完整安装,客户端配置文件将无法正常工作,因为我们客户的机器可能无法访问互联网.基本上我需要一个安装即忘记的程序,所以当我们决定在之后的3.5 SP1中使用任何新东西时,我们可以放心,我们可以简单地应用更新我们的应用程序,而无需安装另一个先决条件

.net installer .net-3.5

10
推荐指数
2
解决办法
1780
查看次数

SQL Server 备份\还原 - 无法访问指定的路径或文件

我最近将BackupDirectory注册表中 SQL Server 2008 R2 实例的默认设置从改为 ,从那时I:\K:\,每当我尝试使用 SSMS 进行备份或恢复时,都会收到错误消息

无法访问指定的路径或文件

当我浏览路径时。

来自 SSMS 的错误

它发生在根目录和K:\. 如果我输入I:\路径并浏览,就不存在这样的问题。我复制了权限I:\,后来添加了 SQL 的服务帐户并MSSQLSERVER具有K:\完全访问权限。我什至尝试添加Everyone完全访问权限,但它仍然显示相同的错误。我用谷歌搜索了一下,发现了很多类似的问题,但没有适合我的解决方案。我也测试master.sys.xp_dirtreeK:\,没有报错。我什至尝试过procmon.exe,但没有迹象表明出了什么问题在此输入图像描述

K:\是我们 SAN 中新创建的池,仅分配用于备份。SQL Server 是 Windows 2008 R2 故障转移群集的一部分。和I:\K:\配置为 SQL Server 的群集资源。

仅供参考,我使用 SQL Server 帐户登录 SSMS,因为我的计算机不属于域。I:\但这从一开始就不是问题。

编辑:如果我使用 T-SQL 备份/恢复,则不会出现错误,这意味着 SQL Server 的读/写权限K:\是正确的。

file-permissions sql-server-2008

6
推荐指数
1
解决办法
2万
查看次数

.Net 8位编码

我正在研究串行端口,以8位数据向某些硬件发送和接收数据.我想将它存储为字符串以便于比较,并且预设数据以字符串或十六进制格式存储在xml文件中.我发现只有在使用ANSI编码的Encoding.Default时才能正确转换8位数据,并且很容易可逆.ASCII编码仅适用于7位数据,UTF8或UTF7也不适用,因为我使用的是1-255中的某些字符.Encoding.Default会很好,但我在MSDN上读到它依赖于OS代码页设置,这意味着它可能在配置的不同代码页上表现不同.我使用编码广泛使用GetBytes()和GetString,但是想要一种在任何配置下始终可用的故障安全和可移植方法.

.net encoding

5
推荐指数
2
解决办法
6515
查看次数

WordPress Cron:以哪个用户身份运行?

我正在写一个插件。它有一些工作要由 wp_cron 执行。现在在脚本中,它会自动创建/编辑一些帖子。那么哪个用户将运行 cron 作业呢?

我还注意到调用时失败WP_Filesystem()

wordpress cron

4
推荐指数
1
解决办法
1485
查看次数

从MySQL中的int列中选择时如何输出enum/string

我正在使用view来完成大部分关于MySQL数据的报告.在其中一个表中,我想在选择数据时将特定列视为ENUM,但它当前是int.

我知道可以使用内部联接来实现这一点,但我会将其作为我的最后选择.

有没有办法构建视图或选择查询,以便我可以将int类型转换为枚举并具有字符串输出而不是int?就像是

SELECT CONVERT(int_column, ENUM('A', 'B', 'C')) FROM table;
Run Code Online (Sandbox Code Playgroud)

我需要将该列存储为int,将列更改为枚举将需要在应用程序级别进行太多更改,并且这只需要一个特定的报告,所以应该没问题.枚举只有11个值.

如果无法进行铸造,那么可以选择三级操作员还是内联工程?

谢谢

mysql enums select

3
推荐指数
1
解决办法
3801
查看次数