在C#中,System.IO.File.Delete(filePath)将删除指定的文件,或引发异常.如果当前用户没有删除文件的权限,则会引发UnauthorizedAccessException.
有没有什么方法可以提前判断删除是否可能抛出UnauthorizedAccessException(即查询ACL以查看当前线程的标识是否有权删除指定的文件?)
我基本上是想做:
if (FileIsDeletableByCurrentUser(filePath)) {
/* remove supporting database records, etc. here */
File.Delete(filePath);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何实现FileIsDeletableByCurrentUser().
我在我正在构建的一些搜索代码中使用了Levenshtein算法的优化版本.我有功能单元测试来验证算法返回正确的结果,但在这种情况下,算法的性能也非常重要.
我希望为项目添加一些测试覆盖率,以便如果将来的任何修改影响优化,它们将显示为失败测试 - 因为算法是确定性的并且针对已知测试数据运行,这可能与计数一样详细为给定的一组测试输入执行的指令数.换句话说,我不打算使用定时器测量算法性能 - 我对实际测试算法的内部行为而不仅仅是输出感兴趣.
有什么想法我会如何在C#/ .NET 4中解决这个问题?
编辑:我不想只使用挂钟时间的原因是它会随着CPU负载和测试控制之外的其他因素而变化.例如,这可能导致在构建服务器负载时测试失败.这里将是挂钟监控的部署系统的一部分.
编辑2:这样想吧......当性能是关键要求时,你会如何应用red-> green-> refactor?
在对结构集合使用FirstOrDefault()之后,我看到了一些奇怪的行为.我把它分成了这个复制案例.这个程序不会编译
using System;
using System.Linq;
namespace MyProgram {
public class Program {
static void Main() {
var users = new User[] {
new User() { UserGuid = Guid.NewGuid(), Username = "user01" },
new User() { UserGuid = Guid.NewGuid(), Username = "user02" }
};
var user = users.FirstOrDefault(u => u.Username == "user01");
Console.WriteLine(user == default(User) ? "not found" : "found");
}
}
public struct User {
public Guid UserGuid;
public string Username;
}
}
Run Code Online (Sandbox Code Playgroud)
编译器错误是相当神秘的:
运算符'=='不能应用于'MyProgram.User'和'MyProgram.User'类型的操作数
将结构更改为类可以正常工作 - 但我不知道为什么我无法将结构'实例'与默认值进行比较?
我们的大多数Web应用程序都包含Deploy.ps1 Powershell脚本.Octopus Deploy使用它在生产部署期间配置应用程序,但我们也使用它来设置开发人员的本地IIS设置.在Windows 7,Windows 8.1和我们所有的Win2012生产服务器上都可以正常工作.
它不适用于Windows 10,这似乎是因为Set-ItemPropertycmdlet无效.没有错误消息或任何东西,它只是没有做任何事情.
IIS站点api.example.com已经存在,我们使用Powershell创建/ myapp应用程序,然后将应用程序的物理路径更改为D:\ Projects\Demo
PS C:\> IIS:
PS IIS:\> cd Sites\api.example.com
PS IIS:\Sites\api.example.com> New-WebApplication myapp -site api.example.com -PhysicalPath C:\inetpub\wwwroot
Name Application pool Protocols Physical Path
---- ---------------- --------- -------------
myapp DefaultAppPool http C:\inetpub\wwwroot
PS IIS:\Sites\api.example.com> set-itemproperty myapp -name PhysicalPath -value D:\Projects\Demo
PS IIS:\Sites\api.example.com> get-itemproperty myapp
Name Application pool Protocols Physical Path
---- ---------------- --------- -------------
demo DefaultAppPool http C:\inetpub\wwwroot
^ THIS IS WRONG!
Run Code Online (Sandbox Code Playgroud)
在Windows 7上运行完全相同的命令集,您将获得相同的输出,但在最后一步,PhysicalPath属性已按预期更改:
PS IIS:\Sites\api.example.com> get-itemproperty myapp
Name Application pool …Run Code Online (Sandbox Code Playgroud) 我们的一些用户使用无法处理Unicode的电子邮件客户端,即使在邮件头中正确设置了编码等.
我想"规范化"他们收到的内容.我们遇到的最大问题是用户将来自Microsoft Word的内容复制到我们的Web应用程序中,然后通过电子邮件转发该内容 - 包括分数,智能引号以及Word为您帮助插入的所有其他扩展Unicode字符.
我猜这里没有明确的解决方案,但在我坐下来开始编写伟大的查找表之前,是否有一些内置的方法可以让我开始?
基本上涉及三个阶段.
首先,从其他正常字母中删除重音 - 解决方案就在这里
This paragraph contains “smart quotes” and áccénts and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
去
This paragraph contains “smart quotes” and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
其次,用它们的ASCII等效替换单个Unicode字符,给出:
This paragraph contains "smart quotes" and accents and ½ of the problem is fractions
Run Code Online (Sandbox Code Playgroud)
在我实现自己的解决方案之前,这是我希望有解决方案的部分.最后,使用合适的ASCII序列替换特定字符 - ½到1/2,依此类推 - 我很确定任何类型的Unicode魔法本身都不支持,但是有人可能已经写了一个合适的查找表我可以再利用.
有任何想法吗?
我有一个CI构建从Github拉出功能分支,并使用基于项目,分支和内部版本号的文件夹命名约定将它们构建/打包到本地文件夹中.
对于命名分支(feature1,feature2),这非常有用.
问题在于,当我对master进行提交时,TeamCity会将teamcity.build.branch公开为<default>- 这意味着当构建步骤扩展时
E:\Packages\MyProject\%teamcity.build.branch%\
它结束了E:\Packages\MyProject\<default>- 然后崩溃构建步骤,因为它不是有效的Windows路径.
我可以在完全限定的构建参数中看到主分支名称:
teamcity.build.branch <default>
teamcity.build.checkoutDir C:\TeamCity\BuildAgents\agent-mulder\work\2151838a7933464d
teamcity.build.default.checkoutDir 2151838a7933464d
teamcity.build.id 16347
teamcity.build.vcs.branch.github_myproject refs/heads/master
Run Code Online (Sandbox Code Playgroud)
但理想情况下,我需要获得master作为teamcity.build.branch,以便在我的构建步骤中使用.
我可以在运行时转换参数吗?覆盖行为?我甚至尝试将VCS分支名称设置为DO_NOT_USE,希望"master"不再符合默认值 - 但这似乎也不起作用.
给定输入数组
[a,b,c,d,e]
Run Code Online (Sandbox Code Playgroud)
和'加入'功能 (a,b) => (a+b)
我的代码返回以下数组数组,包含通过将join函数应用于各种元素对而获得的每个可能的变体,同时保持顺序:
[
[a,b,c,d,e],
[a,b+c,d,e],
[a,b+c+d,e],
[a,b,c+d,e],
[a+b,c,d,e],
[a+b,c+d,e],
[a+b+c,d,e],
[a+b+c+d,e],
[a,b,c,d+e],
[a,b+c,d+e],
[a,b+c+d+e],
[a,b,c+d+e],
[a+b,c,d+e],
[a+b,c+d+e],
[a+b+c,d+e],
[a+b+c+d+e],
]
Run Code Online (Sandbox Code Playgroud)
在视觉上,我想要做的是:

代码可以工作,但我不知道该怎么称呼它 - 并且想要使用熟悉此操作的其他开发人员可以理解的名称,如果存在这样的名称.它不是一个电源组,但它是类似的......这个特定的set/array操作有一个名字吗?
编辑:好的.它们不是排列 ; 排列将是不同顺序的5元素阵列[[a,b,c,d,e], [e,d,c,b,a], [a,d,b,c,e], ...]
它们不是分区,因为任何子集只能包含输入的相邻元素. - 换句话说,分区允许这样:

(这可能源于纯集理论,没有有序集的概念.)
它们不是组合,因为输出的每个元素都只使用输入集的每个成员一次.
我认为myArray.OrderedPartitions((a,b) => (a+b))可能是一个适当的简洁和解释.
我正在使用RestSharp构建HTTP API客户端,我注意到当服务器返回HTTP错误代码(401 Unauthorized,404 Not Found,500 Internal Server Error等)时,RestClient.Execute()不会抛出异常 - 而是我得到一个RestResponsenull .Data属性的有效.我不想在我的API客户端中手动检查每个可能的HTTP错误代码 - RestSharp是否提供了将这些错误传递给我的客户端应用程序的更好方法?
更进一步的细节.RestSharp公开一个Response.ErrorException属性 - 如果RestClient.Execute<T>()调用导致任何异常,它将通过ErrorException属性公开而不是被抛出.他们的文档包括以下示例:
// TwilioApi.cs
public class TwilioApi {
const string BaseUrl = "https://api.twilio.com/2008-08-01";
public T Execute<T>(RestRequest request) where T : new()
{
var client = new RestClient();
client.BaseUrl = BaseUrl;
client.Authenticator = new HttpBasicAuthenticator(_accountSid, _secretKey);
request.AddParameter("AccountSid", _accountSid, ParameterType.UrlSegment); // used on every request
var response = client.Execute<T>(request);
if (response.ErrorException != null)
{
const string message …Run Code Online (Sandbox Code Playgroud) 我有一些包装代码,它运行一组NUnit测试,扫描实时网站以获取某些响应代码.
我想针对不同的服务器运行这些测试.手动运行时,我可以通过编辑Windows\System32\drivers中的/ etc/hosts文件并暂时将www.mysite.com设置为10.0.0来执行此操作.
有什么方法可以在.NET控制台应用程序中做同样的事情 - 暂时覆盖DNS记录或以某种方式拦截分辨率并返回不同的IP地址?
编辑:这用于测试Web场中的多个服务器.我有三个实时服务器,所有这些都认为它们是www.example.com.因为服务器使用HTTP主机头,所以我不能只针对server1,然后是server2,然后是server3运行测试,因为对http:// server1 /的HTTP请求 不会返回与http://请求相同的内容.www.example.com/已经解决了server1 ...
我正在尝试为一些常见任务设置AutoHotkey宏,我希望热键模仿Visual Studio的"两步快捷方式"行为 - 即按Ctrl- K将启用"宏模式"; 在微距模式下,按某些键将运行一个宏,然后禁用"宏模式",任何其他键只会禁用宏模式.
示例 - 键入文件名时,我希望能够通过点击Ctrl- K然后按下来插入今天的日期D.
有没有人有一个像这样的状态AutoHotkey脚本的好例子?
c# ×5
.net ×2
algorithm ×1
arrays ×1
ascii ×1
autohotkey ×1
codepages ×1
dns ×1
git-branch ×1
hosts-file ×1
http ×1
iis-10 ×1
ipconfig ×1
math ×1
normalize ×1
nunit ×1
operators ×1
optimization ×1
permissions ×1
powerset ×1
powershell ×1
restsharp ×1
security ×1
set-theory ×1
struct ×1
teamcity ×1
teamcity-7.1 ×1
unicode ×1
unit-testing ×1
windows-10 ×1