避免用每个 运行 覆盖文件和内容或用可执行目录请求

avoid overwriting of file and content with each run or request with executable directory

您好,我正在尝试为我的 windows 表单应用程序可执行文件创建包含文本文档的目录文件夹。现在我必须让它在本地可供其他用户使用。

我是这样做的:

 string dir = "%ProgramData%\MyAppName\doc.txt";
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(Path.GetDirectoryName(dir));
            var stream = File.CreateText(dir);            
            stream.Close();
        }

这是我从代码中的可执行目录访问路径:

const string mypath = (@"%ProgramData%\MyAppName\doc.txt"); 

在实施的一个阶段,我还单独创建了文档,但我几乎可以肯定这与问题无关,因为创建一次并且如果文件存在则永远不会覆盖,保留文本文档的内容与每个新的 运行 的程序,向其添加数据或请求。只有我手动删除它,在这种情况下创建新的:

if (File.Exists(mypath))
                wordsTyped.AddRange(File.ReadAllLines(mypath));

并且与调试文件夹的本地路径完美配合,如下所示:

const string tetdb = ("doc.txt"); 

所以可执行文件的代码必须以同样的方式工作,如果目录、文件夹、包含内容的文件存在,不要对它做任何事情。但是对于上面的代码,它会根据对它的每个请求重写所有内容,不仅是新的 运行 程序,还有文件夹、文本文档和里面的内容。

但必须如下:如果文件夹创建一次,如果目录、文件、文件存在,没有可执行代码的netter,或者按回车,或者已经存在。每次启动程序或请求添加内容时,将内容保存在文本文档中。

我试过只创建文件夹到可执行路径,以单独创建文本文档,如上所示,但我得到了相同的结果。那么如何避免这个问题,我做错了什么?

!Directory.Exists 的测试是您问题的原因。
您将文件名传递给方法,因此方法 returns false(具有该名称的目录不存在)。 这意味着您总是输入 if 并在现有文件上调用 File.Create 覆盖文件的内容

string file = "%ProgramData%\MyAppName\doc.txt";
if (!Directory.Exists(Path.GetDirectoryName(file)))
{
   ....
}