Tag: file io

如何获取当前正在执行的DLL的位置?

我有一个configuration文件,我需要加载作为我写一个DLL的执行的一部分。 我遇到的问题是,当应用程序运行时,我放置dll和configuration文件的位置不是“当前位置”。 例如,我把dll和xml文件放在这里: D:\ Program Files \ Microsoft Team Foundation Server 2010 \ Application Tier \ Web Services \ bin \ Plugins 但是,如果我尝试引用xml文件(在我的dll中),像这样: XDocument doc = XDocument.Load(@".\AggregatorItems.xml") 那么\ AggregatorItems.xml转换为: C:\ WINDOWS \ SYSTEM32 \ INETSRV \ AggregatorItems.xml 所以,我需要find一种方法(我希望)知道当前正在执行的DLL位于何处。 基本上我正在寻找这个: XDocument doc = XDocument.Load(CoolDLLClass.CurrentDirectory+@"\AggregatorItems.xml")

C#将文件复制到另一个名称不同的位置

如果满足某些条件,我想从一个目录复制文件到另一个没有删除原始文件。 我也想把新文件的名字设置成一个特定的值。 我正在使用C#并使用FileInfo类。 虽然它有CopyTo方法。 它不给我select设置文件名。 而MoveTo方法,同时允许我重命名文件,删除原始位置的文件。 什么是最好的方式去做这件事?

replace文件内容中的string

如何打开一个文件Stud.txt,然后用“Orange”replace“A”的出现?

input不是有效的Base-64string,因为它包含非基本的64个字符

我有一个REST服务读取一个文件并将其转换为Byte数组,然后将其转换为Base64string后,将其发送到另一个控制台应用程序。 这部分正确的发生,但是当在应用程序接收到相同的stream时,它被操纵,不再是一个有效的Base64string。 一些垃圾字符正在被引入到stream中。 我将stream转换回字节时得到的exception是“input不是有效的Base-64string,因为它包含非基本64字符,多于两个填充字符或填充中的非空白字符字符“ 。 在服务: [WebGet(UriTemplate = "ReadFile/Convert", ResponseFormat = WebMessageFormat.Json)] public string ExportToExcel() { string filetoexport = "D:\\SomeFile.xls"; byte[] data = File.ReadAllBytes(filetoexport); var s = Convert.ToBase64String(data); return s; } 申请时: var client = new RestClient("http://localhost:56877/User/"); var request = new RestRequest("ReadFile/Convert", RestSharp.Method.GET); request.AddHeader("Accept", "application/Json"); request.AddHeader("Content-Type", "application/Json"); request.OnBeforeDeserialization = resp => {resp.ContentType = "application/Json";}; var […]

什么是在Perl中将文件转换为string的最佳方式?

是的, 有很多方法可以做到这一点,但必须有一个规范或最有效或最简洁的方法。 我会添加我所知道的答案,看看什么渗透到顶端。 要清楚,问题是如何最好地将文件的内容读入string。 每个答案一个解决scheme

第一次应用程序更新,用户数据丢失(存储在Documents目录中)

我的第一个应用程序更新昨天刚刚上线,我收到了一个抱怨,说更新导致用户创build的数据(其中一些)消失。 我已经能够重现这个问题,但是不知道为什么。 在Documents目录中,我保存了一个关键文件,告诉我所有用户文件的“标题”及其文件名(完整path)。 然后,所有用户的文件也在Documents目录中。 更新发生时,密钥文件仍然存在(至less,我认为这是因为数据显示在应用程序的第一个屏幕 – 应用程序完全退出,并在更新后重新启动,对吧?),但是当用户尝试导航到实际的文件,没有数据和用户input的任何新的数据从不保存。 它的行为和debugging时一模一样,当我意外地使用一个无效的文件名时(不正确的字符) – 它从来没有保存过。 但随着更新,这些文件已被正确保存在旧版本,但在某种程度上在新版本中失败。 这是我的第一个应用程序和我的第一个更新,我在这里相当茫然。 我已经从现在的销售中拉出了应用程序(不知道你不能简单地回复到旧版本!),并且非常感谢关于在哪里/如何查找问题以及如何写一个好的更新,不会丢失数据。 (到目前为止,我所发现的只是“将数据保存到文档目录中”,这正是我已经在做的)。 我确实有原来的应用程序保存在自己的项目中,我可以回去再次工作。 当我开始进行更新时,我复制了整个目录,而且我怀疑这是否会成为问题? 我改变了保存所有XCode文件的目录名称,并使用了Project> Rename函数。 莫名其妙地有这个效果吗? 该应用程序(包括原始和更新)运行在4.2及以上版本,如果这很重要。 parsing度: 我相信我已经想出了这个问题。 就像我在问题开始时所说的那样,我将用户文件的完整path保存在我的密钥文件中。 显然,完整的path不能保证在更新后是相同的(我确定这是logging在某处,但我没有跑过去)。 因此,用户文件HAD被传送到更新的新文档目录,但是我正在以旧绝对path(即不在我的沙箱中)查找它们。 通过在应用程序的didFinishLaunching中放置一个循环来修复文件path的问题(我一直在本地寻找并且仍在工作),并将其截断为仅仅是文件path。 只要执行文件操作,就必须以编程方式find并添加文档path。 因为重新安装原始版本并不能解决用户的问题,所以对于我来说,对于我来说实在是件好事,因为没有办法在商店中恢复到以前的二进制文件,但我相信它至less有原来。 我希望有一种方法可以禁止更新,但仍然允许新购买(因为问题不会影响新的购买)。 虽然可能不是一个普通的情况,

用T4获取项目或相关目录

如何从t4模板中获得对Visual Studio项目或解决scheme的目录或t4模板的目录的引用? 我有一个模板,将多个文件连接在一起,这些文件与模板相关。 我需要通过一个相对的方法来获得对绝对位置的引用。 硬编码的绝对path是不可接受的,因为Visual Studio项目不会总是在相同的位置,这将打破代码生成。 从环境中读取当前工作目录不起作用,因为它返回T4引擎所在的位置而不是模板。 我只是进入t4所以任何帮助,将不胜感激。

IntPtr.Zero是否等于null?

我想设置ReadFileasynchronous运行,并根据MSDN ,我需要设置lpNumberOfBytesRead为null : 如果这是一个asynchronous操作,以避免可能的错误结果,请使用NULL作为此参数。“ 例如,如果我有以下内容: [DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)] public static extern bool ReadFile( IntPtr hFile, out byte[] aBuffer, int cbToRead, IntPtr cbThatWereRead, ref OVERLAPPED pOverlapped ); 我这样称呼它(第四个参数为空): Win32API.ReadFile(readHandle, out data_read, Win32API.BUFFER_SIZE, IntPtr.Zero, ref over_lapped); 将这与用null调用它相同吗? 如果不是,我应该在声明或函数调用中更改哪些内容? 我也很好奇,如果我应该使用SafeHandle或HandleRef而不是IntPtr的hFile参考? 我知道确保我用CloseHandle(IntPtr)closures句柄,当我完成它,只是不知道是否有任何其他理由使用其他两个选项通过IntPtr 。 我也试图避免使用不安全的代码。 编辑:事实certificate,我不应该设置IntPtr.Zero的第四个参数,因为即使我asynchronous运行,它仍然可以立即返回。 请参阅asynchronous磁盘I / O。 啊,我喜欢矛盾的故事。

在File.Create之后closures一个文件

我检查一下是否存在一个文件 if(!File.Exists(myPath)) { File.Create(myPath); } 但是,当我用这个新创build的文件创build一个StreamReader时,我得到一个错误说 该进程无法访问文件'[我的文件path]',因为它正在被另一个进程使用。 没有可以调用的File.Close(myPath) ,以便在创build后closures它,那么如何释放此资源以便稍后在程序中打开它?

unit testing文件I / O

通过堆栈溢出的现有unit testing相关的线程,我找不到一个关于如何unit testing文件I / O操作的明确答案。 我最近才开始研究unit testing,之前已经意识到了优点,但是很难习惯于先写testing。 我已经build立了我的项目来使用NUnit和Rhino Mocks,虽然我理解了它们背后的概念,但我在理解如何使用模拟对象方面遇到了一些麻烦。 具体来说,我有两个问题,我想回答。 首先,unit testing文件I / O操作的正确方法是什么? 其次,在我学习unit testing的尝试中,我遇到了dependency injection。 得到Ninject的设置和工作后,我想知道是否应该在我的unit testing中使用DI,或直接实例化对象。