避免用每个 运行 覆盖文件和内容或用可执行目录请求
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)))
{
....
}
您好,我正在尝试为我的 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)))
{
....
}