编辑:我找到了解决方案。我曾经以为在尝试编写要比较的文件时会生成错误,实际上它是在我尝试读取要比较的文件时生成的。我在为比较可执行文件调用的命令中出现语法错误,导致结果文件未生成。当我尝试读取不存在的文件时,我看到了访问冲突(是的,我应该检查文件是否存在)。我有问题让BC生成比较(由于某种原因,完全相同的命令从命令提示符起作用,但从C#运行时不起作用),但我会在必要时将其作为一个单独的问题。
我正在开发一个.net应用程序,用于比较构建之间的代码更改。
我尝试添加的应用程序的一部分超出了比较,生成了两个代码块的html比较。
为了做到这一点,我从代码中生成文件(请注意,我知道文件名对于多个用户会有冲突问题,我稍后会解决这个问题),然后从命令行调用beyond compare可执行文件。我使用以下代码生成文件:
//write the code to a local disk file
System.IO.File.WriteAllText(@workingFolder + "\\File1.txt", (String)dataRow["OldMethodCode"]);
System.IO.File.WriteAllText(@workingFolder + "\\File2.txt", (String)dataRow["NewMethodCode"]);
workingFolder的值是:“C:\ inetpub \ wwwroot”
我遇到的问题是,当运行此代码并尝试创建这些文件时,我得到以下异常:
[UnauthorizedAccessException:访问路径'C:\ inetpub \ wwwroot' 被拒绝。] System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)+216 System.IO.FileStream.Init(String path,FileMode 模式,FileAccess访问,Int32权限,布尔useRights,FileShare share,Int32 bufferSize,FileOptions选项,SECURITY_ATTRIBUTES secAttrs,String msgPath,Boolean bFromProxy,Boolean useLongPath, Boolean checkHost)+1430 System.IO.FileStream..ctor(String path, FileMode模式,FileAccess访问,FileShare共享,Int32 bufferSize, FileOptions选项,String msgPath,Boolean bFromProxy,Boolean useLongPath,Boolean checkHost)+214
System.IO.StreamReader..ctor(String path,Encoding encoding,Boolean detectEncodingFromByteOrderMarks,Int32 bufferSize,Boolean checkHost) +187 System.IO.File.InternalReadAllText(String path,Encoding encoding,Boolean checkHost)+90
_Default.gridView_SelectedIndexChanged(Object _sender,EventArgs e)+1024 System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e,Boolean causeValidation,String validationGroup)+1241
System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint) 3804
我已经尝试了很多方法来解决这个问题。与任何问题一样,您可能会忘记所有选项,但我认为这些选项成功率最高(但没有成功):
在所有情况下,我似乎无法创建文件,更不用说访问它来运行比较。
是否有人提供有关如何解决此问题的建议,或提供不需要文件创建的替代/更好的比较方法?
谢谢!
答案 0 :(得分:0)
产生错误......
使用以下代码创建一个Web应用程序并在主机目录“C:\ inetpub \ wwwroot \”中写入文件
string WorkingFolder = System.Configuration.ConfigurationManager.AppSettings["FolderPath"];
protected void Page_Load(object sender, EventArgs e)
{
string s = "abcdefghijklmnopqrstuvwxyz";
System.IO.File.WriteAllText(WorkingFolder + @"\File1.txt", s);
}
我在默认应用程序池下发布和部署应用程序。我的默认应用程序池使用 域用户\ IIS_IUSRS帐户。默认情况下我只有Read&执行“C:\ inetpub \ wwwroot \”文件夹的访问权限。我收到以下错误..,
Source Error:
第14行:{ 第15行:string s =“abcdefghijklmnopqrstuvwxyz”; 第16行:System.IO.File.WriteAllText(WorkingFolder + @“\ File1.txt”,s); 第17行:} 第18行:}
Source File: D:\Working Samples\IISCheck\IISCheck\Default.aspx.cs Line: 16
堆栈追踪:
[UnauthorizedAccessException: Access to the path 'C:\inetpub\wwwroot\File1.txt' is denied.]
System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +10555843
System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy) +2580
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy) +138
System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options) +98
System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize) +139
System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding) +17
System.IO.File.WriteAllText(String path, String contents, Encoding encoding) +60IISCheck._Default.Page_Load(Object sender, EventArgs e) in D:\Working Samples\IISCheck\IISCheck\Default.aspx.cs:16
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
System.Web.UI.Control.OnLoad(EventArgs e) +132
System.Web.UI.Control.LoadRecursive() +66
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2428
现在我将IIS_IUSRS的完全控制权限授予“C:\ Inetpub \ wwwroot”目录.... 它工作,并能够写入文件....
Double检查文件夹访问权限。绝对可以写.. 我正在使用IIS7.5
答案 1 :(得分:0)
好的,这实际上是后来在代码中引起的。当我尝试读取报告时错误正在触发,该报告实际上尚未生成。
我在从C#运行时生成报告时遇到问题(完全相同的命令在命令提示符下运行)但是如果有必要,我会就此问一个单独的问题。