我正在编写一个将序列化类并将其保存到文件的函数,某些类必须保存在不同的文件夹中。我使用Unity和C#。这是我的代码:
public void save<T>(T data, string fileName) where T : class{
if (fileName == "")
Debug.Log ("Empty file path");
FileStream file = null;
try{
if(fileName.IndexOf("/") > 0){
string[] strDirName = fileName.Split(new char[] {'/'});
string dirName = strDirName[0];
if(!Directory.Exists(Application.persistentDataPath + dirName)){
Directory.CreateDirectory(Application.persistentDataPath + "/" + dirName);
}
}
file = File.Create(constructFilePath(fileName));
string a = constructFilePath(fileName);
binFormatter.Serialize(file, data);
Debug.Log ("File saved succesfully" + fileName);
}catch(IOException e){
Debug.Log(e.ToString());
}finally{
if(file != null)
file.Close();
}
}
string constructFilePath(string fileName){
return Path.Combine(Application.persistentDataPath, fileName);
}
我不知道为什么它将文件保存为文件夹,这是因为我添加了这一行来构造constructFilePath
if(fileName[0] != "/")
fileName = "/" + fileName;
但如果没有此文件,它会创建不同的文件夹。它将Application.persistentDataPath与文件夹名称连接起来并在那里创建文件 所以,如果我的persistentDataPath = C:/ Users / User / AppData / LocalLow / DefaultCompany / TestGame,我想将文件存储在文件夹a中,并将文件b存储在其中
C:/Users/User/AppData/LocalLow/DefaultCompany/TestGame/a/b
它创建名为TestGamea的文件夹并将b存储在其中
C:/Users/User/AppData/LocalLow/DefaultCompany/TestGamea/b
答案 0 :(得分:2)
你正在评估一件事并在这里执行不同的事情:
if(!Directory.Exists(Application.persistentDataPath + dirName)){
Directory.CreateDirectory(Application.persistentDataPath + "/" + dirName);
}
将其更改为:
if(!Directory.Exists(Path.Combine(Application.persistentDataPath, dirName))){
Directory.CreateDirectory(Path.Combine(Application.persistentDataPath, dirName));
}
像埃里克所说的那样,使用Path.Combine。它可以可靠地组合路径部分并确保每次都获得相同的结果,因此您不必担心字符串操作。