使用C++开发UWP应用时,遇到一个异常的问题:在部分win10设备使用FILE类写文件失败
看了下获取可写目录的代码没问题,代码如下(有问题还望指正),
string getWritablePath() const
{
auto localFolderPath = Windows::Storage::ApplicationData::Current->LocalFolder->Path;
return convertPathFormatToUnixStyle(std::string(PlatformStringToString(localFolderPath)) + '\\');
}
查看该文件夹的权限,读写权限也都有,不知为何使用fwrite一直写文件失败(哪位大神知晓,还望告知下,非常感谢)
没办法只能使用UWP的API写文件,使用UWP的API写文件的代码:
bool writeStringToFile(std::string dataStr, const std::string& fullPath)
{
std::string writePath = getWritablePath();
std::string relativePath;
if (fullPath.size()>writePath.size())
{
relativePath = fullPath.substr(writePath.size(), fullPath.size() - writePath.size());
}
else {
relativePath = fullPath;
}
int pos = relativePath.find_last_of("/");
std::string fileName;
std::string filePath;
if (pos != std::string::npos)
{
filePath = relativePath.substr(0, pos);
fileName = relativePath.substr(pos + 1, relativePath.size() - pos);
}
else {
fileName = relativePath;
}
std::string newPath;
for (auto c: filePath)
{
if (c=='/')
{
newPath += "\\";
}
else {
newPath += c;
}
}
Platform::String^ path = PlatformStringFromString(newPath);
Platform::String^ goalFile = PlatformStringFromString(fileName);
IBuffer^ buffer = GetBufferFromString(dataStr);
StorageFolder^ targetFolder = ApplicationData::Current->LocalFolder;
if (path->Length()>0)
{
create_task(targetFolder->CreateFolderAsync(path, Windows::Storage::CreationCollisionOption::OpenIfExists)).then([goalFile, buffer](StorageFolder^targetFolder) {
create_task(targetFolder->CreateFileAsync(goalFile, Windows::Storage::CreationCollisionOption::OpenIfExists)).then
([buffer](StorageFile^ sourceFile)
{
FileIO::WriteBufferAsync(sourceFile, buffer);
});
});
}
else {
create_task(targetFolder->CreateFileAsync(goalFile, Windows::Storage::CreationCollisionOption::OpenIfExists)).then
([buffer](StorageFile^ sourceFile)
{
FileIO::WriteBufferAsync(sourceFile, buffer);
});
}
return true;
}
运行,写入成功!