我一直在寻找一种在C#中创建文件快捷方式的简单方法,但我只找到了那样做的外部dll.这实际上是相当令人惊讶的,没有内置的方法来做到这一点..
无论如何,我知道lnk文件只是具有特定命令和给定路径的文本文件.我想也许我可以创建一个文本文件(在代码中)将它的文本设置为正确的命令并将其扩展名更改为.lnk我尝试先手动执行此操作,但未能这样做.
有没有办法做这样的事情(或者可能是另一种简单的方法)来创建c#中某个路径的快捷方式?
为了清楚起见,通过快捷方式我的意思是一个.lnk文件,它导致文件 编辑:而文件我指的是我想要的任何文件,而不仅仅是我自己的应用程序的快捷方式
如果它不适合每个场景,我会编辑.
添加以下参考:
添加此命名空间:
using Shell32;
using IWshRuntimeLibrary;
Run Code Online (Sandbox Code Playgroud)
接下来似乎工作:
var wsh = new IWshShell_Class();
IWshRuntimeLibrary.IWshShortcut shortcut = wsh.CreateShortcut(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\shorcut2.lnk") as IWshRuntimeLibrary.IWshShortcut;
shortcut.TargetPath = @"C:\Users\Zimin\Desktop\test folder";
shortcut.Save();
Run Code Online (Sandbox Code Playgroud)
希望它能帮助其他人,感谢您的关注.
另外,如果有一种创建文件的方法,请编写正确的命令,然后将其更改为lnk文件,请告诉我.
你能用静态类型检查(如Java)命名语言,代码是数据(如LISP)吗?我的意思是两种语言.
如何转换:
System.Linq.Expression.Expression
Run Code Online (Sandbox Code Playgroud)
成:
Microsoft.CodeAnalysis.CSharp.CSharpCompilation
Run Code Online (Sandbox Code Playgroud)
或者进入:
Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree
Run Code Online (Sandbox Code Playgroud)
我需要下一个具体案例才能像其中一个选项一样工作:
我可以编译Expression并CSharpSyntaxTree执行可执行代码的相同行为
当我看到手动输入的C#表达式时,我可以得到CSharpSyntaxTree并生成相同的代码.
public void MultipleStatementsBlockTest()
{
var p = Expression.Parameter(typeof(int), "p");
Expression assignment = Expression.Assign(p, Expression.Constant(1));
Expression addAssignment = Expression.AddAssign(p, Expression.Constant(5));
// Convert addAssignment to Roslyn tree here
}
class HasIndexers
{
public object this[string s] => null;
public object this[int i] => null;
}
public void CanPrettyPrintVariousIndexers()
{
Expression<Func<Bool>> expr = () => new HasIndexers()[3] == new HasIndexers()["three"];
// Convert expr to Roslyn tree here
} …Run Code Online (Sandbox Code Playgroud)我正在寻找一种很好的模式来在 C# 中实现引用计数。我有一个
Dictionary<string, MyObject> ObjList;
Run Code Online (Sandbox Code Playgroud)
我想要做的是分发对MyObject实例的引用(如果它们存在),如果它们不存在则创建新的引用。我的代码中的多个地方可能会引用一个MyObject实例,但是当所有地方都被释放时,我想将它从我的字典中删除。我已经调查过了,WeakReference但我不确定它是否适用于这里??
编辑 1.) 细节我使用的是OPC服务器,所以每当我引用一个项目时,我都想使用字典来查找对该项目的现有引用。当我不再需要该项目时,我想取消订阅该项目。要知道我的代码中当前何时或有多少地方正在使用该项目并不容易。
为什么我不能在F#中使用通用的非托管结构?可能Cell<'T when 'T: unmanaged>是不是没有管理,那么我怎么能解决这个问题?
type FloatCell =
struct
val x: float
val y: nativeptr<FloatCell>
end
[<Struct>]
[<StructLayout(LayoutKind.Sequential)>]
type Cell<'T when 'T: unmanaged> =
struct
val x: 'T
val y: nativeptr<Cell<'T>>
end
Run Code Online (Sandbox Code Playgroud)
给
错误FS0001:通用构造要求类型'Cell <'T>'是非托管类型[E:\ dzmitry\src\uncorefx\src\uncorefx\uncorefx.fsproj]
更新:
C#也一样.
unsafe struct FloatCell
{
public float val;
public FloatCell* next;
}
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
unsafe struct Cell<T> where T: unmanaged
{
public float val;
public Cell<T>* next;
}
Run Code Online (Sandbox Code Playgroud)
有错误:
错误CS0208:无法获取地址,获取大小或声明指向托管类型的指针('Program.Cell')
我不认为它是管理的.
UPDATE2:
我试过属性.没有帮助.我使用了扩展属性进行强制转换.可能解决方案 但质疑为什么我不能原生那样做?或者我能做到吗?或者我应该提出C#/ F#问题?
[<Struct>]
[<NativeCppClass>]
[<System.Runtime.CompilerServices.UnsafeValueType>]
[<StructLayout(LayoutKind.Sequential)>]
type Cell<'T when 'T: …Run Code Online (Sandbox Code Playgroud) 用例:获取节点的所有边,按标签分组,并按标签、显示名称和两者的计数对 otherV 分组。
图有以下节点:post、product、company。帖子有一个名为评论的产品和公司。
对于 postid,有没有办法获取按产品和公司分组的评论计数。
我想在表格中显示以下信息。
postid | 评论(计数)| 产品(计数) postid | 评论(计数)| 公司(数)
我试过outE(),out()带有groupby标签,但我似乎无法构建一个查询,该查询会给我多个groupby's的计数。
非常感激任何的帮助。
提前致谢。
graph = TinkerGraph.open()
g = graph.traversal()
v1 = graph.addVertex(id, 1, label, "post")
v2 = graph.addVertex(id, 2, label, "company")
v3 = graph.addVertex(id, 3, label, "company")
v4 = graph.addVertex(id, 4, label, "product")
v5 = graph.addVertex(id, 5, label, "product")
v1.addEdge("reviews", v2)
v1.addEdge("reviews", v3)
v1.addEdge("reviews", v4)
v1.addEdge("reviews", v5)
Run Code Online (Sandbox Code Playgroud)
c# ×4
.net ×3
automation ×1
dictionary ×1
f# ×1
gremlin ×1
lisp ×1
lnk ×1
native ×1
reference ×1
roslyn ×1
s-expression ×1
shortcut ×1
unmanaged ×1