【发布时间】:2018-08-21 15:43:07
【问题描述】:
我在使用 UWP 制作文本文件时遇到了麻烦。 我体验过如何在 UWP 中制作文本文件。
但是当我尝试制作自己的程序时,我在创建文件时遇到了一些问题。不知道哪里来的原因。我对 C# 类 p 缺乏了解?还是滥用内置类(如 storageFile 等)功能?
我让我的应用程序从设备读取文件并保存为另一个文件。
但它根本不起作用。
当我使用断点找出问题所在时。
Picture1. outputFile is setted as a null
您可以看到 i.outputFile(type StorageFile) 设置为空。但按照我的意图,它不应该保持为空。 因为我使用名为“setOutFile(StorageFolder)”的成员函数设置了它的(我的)输出文件。你可以在上图中看到。
下面是处理我的 ClassType 的源代码。它在遇到 FileIO.WriteTextAsync 时停止...因为 i.outPutFile 为空。
public async Task<List<string>> DoRandom(FileLists fl, StorageFolder folder)
{
FileLists retLists = new FileLists();
List<string> encodingList = new List<string>();
foreach (UploadedFile i in fl)
{
// read stream from storagefile
Stream s = await i.originFile.OpenStreamForReadAsync();
// streamreader from stream
StreamReader sr = new StreamReader(s, Encoding.ASCII);
i.setOutFile(folder);
if (sr.CurrentEncoding == Encoding.ASCII)
{
encodingList.Add("ASCII " + i.outputName);
}
string str = await sr.ReadToEndAsync();
StringBuilder stringBuilder = new StringBuilder(str);
if (Option1)
{
doOption1(stringBuilder);
}
await FileIO.WriteTextAsync(i.outputFile, stringBuilder.ToString());
if (Option1);
};
return encodingList;
}
在 Uploaded Class 中(你可以看到 setOutFile 函数)。
class UploadedFile
{
public StorageFile originFile;
public StorageFile outputFile { get; set; }
public string inputName {get; private set; }
public string outputName {get; private set; }
public string fileSz{get; private set;}
public UploadedFile(StorageFile storageFile)
{
originFile = storageFile;
inputName = storageFile.Name;
}
public async Task GetFileSz()
{
var bp = await originFile.GetBasicPropertiesAsync();
this.fileSz = string.Format("{0:n0} Byte", bp.Size);
}
public async void setOutFile(StorageFolder folder)
{
var rand = new Random();
string charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
StringBuilder result = new StringBuilder(13);
for (int i=0; i<13; i++)
{
result.Append(charset[rand.Next(charset.Length)]);
}
StringBuilder outputName = new StringBuilder();
outputName.Append(inputName.Substring(0, inputName.Length - 4));
outputName.Append("_");
outputName.Append(result);
outputName.Append(".txt");
this.outputName = outputName.ToString();
outputFile = await folder.CreateFileAsync(outputName.ToString(), CreationCollisionOption.ReplaceExisting);
for (int i = 0; i <= 10000; i++) // break point
i++;
}
当我在构造函数中插入一个赋值(下面)时。
outputFile = storageFile;
它几乎不会在目标目录中创建一个带有指定文件名的文件。但是里面没有数据!!!.....我试过下面的源代码,但里面也没有数据。
await FileIO.WriteTextAsync(i.outputFile, "constant String");
my app makes file with edited constructor, but it has no data in it.
我不知道我的问题是什么,C# 类语法还是...什么?
【问题讨论】:
-
uwp 在用户设备上的位置数量有限,您可以在其中写入文件,使您尝试写入的位置可访问您的应用程序,如果您尝试在允许的文件夹之外写入,您的应用程序将获得“访问被拒绝”异常
-
@touseefbsb 但是,该目录只是桌面中的一个文件夹(我用 FolderPicker 得到它)。 UWP App 不允许使用 Desktop 文件夹吗?
-
即使我将文件夹设置为“ StorageFolder folder = Windows.ApplicationModel.Package.Current.InstalledLocation;” 它也不起作用
-
ahan 那么问题似乎不是权限,是其他原因导致的问题,是的,当您使用 folderpicker 获得某些东西时,它允许运行该应用程序,但一般来说桌面文件夹是不允许的为uwp写作。
-
这里提供了很多辅助代码。在不同的测试项目中仅测试文件写入部分可能会有所帮助。您可能还想从官方平台示例中提取并测试 FileAccess 上的示例,这些示例展示了如何将数据写入文件。尤其是ApplicationData 和FileAccess。
标签: c# uwp windows-10-universal