使用C#访问windows8应用程序中的文件
本文关键字:文件 应用程序 windows8 访问 使用 | 更新日期: 2023-09-27 18:24:40
这基本上是针对windows 8应用程序的,我正在使用这个方法写一个文件-
static async void WriteDataCords(int numDataCodewords)
{
StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
var storageFile = await storageFolder.GetFileAsync("DataCodeWords.txt");
string data = numDataCodewords.ToString();
await FileIO.AppendTextAsync(storageFile, data);
}
现在我正在使用这种方法读取文件-
StorageFolder storageFolder7 = KnownFolders.DocumentsLibrary;
var storageFile7 = await storageFolder6.GetFileAsync("DataCodeWords.txt");
string text7 = await Windows.Storage.FileIO.ReadTextAsync(storageFile7);
但当我运行这个程序时,它会抛出一个错误"访问被拒绝或我们无法访问该文件"。使用这种方法,我编写了许多文件并进行了阅读。请让我知道如何解决这个问题。提前感谢
我的问题是,当我访问文件以读取和显示时,文件涉及到写入过程,所以这就是为什么我无法访问该文件,它显示了一个错误。那么,有没有什么方法可以让我们只有在文件编写过程完成,而不是阅读过程开始时才能继续前进?
您可以使用SemaphoreSlim
来限制可以访问资源的线程数。下面是一个处理文件写入/读取的类的示例。当您想写一个文件并调用WriteDataCords方法时,您可以创建它的一个实例。然后,当你想读取并调用ReadDataCords:时,你需要一些方法来访问正确的实例
public class FileReadWrite
{
public string FileName { get; set; }
public FileReadWrite(string fileName)
{
FileName = fileName;
}
private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);
public async Task WriteDataCords(int numDataCodewords)
{
await _semaphore.WaitAsync();
try
{
StorageFolder storageFolder = KnownFolders.DocumentsLibrary;
var storageFile = await storageFolder.GetFileAsync(FileName);
string data = numDataCodewords.ToString();
await FileIO.AppendTextAsync(storageFile, data);
}
finally
{
_semaphore.Release();
}
}
public async Task ReadDataCords()
{
await _semaphore.WaitAsync();
try
{
StorageFolder storageFolder6 = KnownFolders.DocumentsLibrary;
var storageFile7 = await storageFolder6.GetFileAsync(FileName);
string text7 = await Windows.Storage.FileIO.ReadTextAsync(storageFile7);
}
finally
{
_semaphore.Release();
}
}
}
呼叫代码:
public class ClientCode
{
public async void WriteFile()
{
var fileReadWrite = new FileReadWrite("DataCodeWords.txt");
await fileReadWrite.WriteDataCords(42);
}
public async void ReadFile()
{
var fileReadWrite = GetFileReadWriteForFile("DataCodeWords.txt"); //Method for retreiving correct instance of FileWriteRead class
await fileReadWrite.ReadDataCords();
}
private FileReadWrite GetFileReadWriteForFile(string fileName)
{
}
}
您可以跳过FileWriteRead类(它增加了复杂性),直接在原始代码中使用SemaphoreSlim进行写/读,但一次只能写/读一个文件(这可能不是问题)。