我目前正在为一个笔记管理员创建一个UI,并且只是要预览文档等,但我想知道我需要创建什么文件类型,而不是我想做标记文件等的事情,最好是在c#中,基本上是我自己的evernote,这些程序如何存储笔记?
答案 0 :(得分:0)
我不知道如何直接标记文件,但您可以创建自己的系统来执行此操作。我提到了两种方法:
第一种方法是格式化音符/文件的内容,以便有两个部分,即标签和实际文本。当程序加载注释/文件时,它会分隔标记和文本。这有一个缺点,即程序必须加载整个文件才能找到标签。
第二种方法是拥有一个包含文件名及其相关标签的数据库。通过这种方式,程序不必加载整个文件就可以找到标签。
在此解决方案中,您需要以特定方式格式化文件
<Tags>
tag1,tag2,tag3
</Tags>
<Text>
The text you
want in here
</Text>
通过设置这样的文件,程序可以将标签与文本分开。要加载它的标签,您需要以下代码:
public List<string> GetTags(string filePath)
{
string fileContents;
// read the file if it exists
if (File.Exists(filePath))
fileContents = File.ReadAllText(filePath);
else
return null;
// Find the place where "</Tags>" is located
int tagEnd = fileContents.IndexOf("</Tags>");
// Get the tags
string tagString = fileContents.Substring(6, tagEnd - 6).Replace(Environment.NewLine, ""); // 6 comes from the length of "<Tags>"
return tagString.Split(',').ToList();
}
然后要获得你需要的文字:
public string GetText(string filePath)
{
string fileContents;
// read the file if it exists
if (File.Exists(filePath))
fileContents = File.ReadAllText(filePath);
else
return null;
// Find the place where the text content begins
int textStart = fileContents.IndexOf("<Text>") + 6 + Environment.NewLine.Length; // The length on newLine is neccecary because the line shift after "<Text>" shall NOT be included in the text content
// Find the place where the text content ends
int textEnd = fileContents.LastIndexOf("</Text>");
return fileContents.Substring(textStart, textEnd - textStart - Environment.NewLine.Length); // The length again to NOT include a line shift added earlier by code
}
然后我会告诉你如何做其余的事。
在此解决方案中,您拥有所有文件及其关联标签的数据库文件。此数据库文件如下所示:
[filename]:[tags]
file.txt:tag1, tag2, tag3
file2.txt:tag4, tag5, tag6
然后程序将以这种方式读取文件名和标签:
public static void LoadDatabase(string databasePath)
{
string[] fileContents;
// End process if database doesn't exist
if (File.Exists(databasePath))
return;
fileContents = File.ReadAllLines(databasePath); // Read all lines seperately and put them into an array
foreach (string str in fileContents)
{
string fileName = str.Split(':')[0]; // Get the filename
string tags = str.Split(':')[1]; // Get the tags
// Do what you must with the information
}
}
我希望这会有所帮助。