这是我在stackoverflow上提出的第一个问题,非常令人兴奋。很遗憾我的语法和其他类型的错误,如果你纠正它们,我将不胜感激。我想编写一个程序,如果它首先存在于特定文件夹中,则读取csv文件,将其存储在List变量中,添加一些新行并将其写入同一文件。该过程将在一段时间内连续重复。
当程序正在读取和写入文件时,如果使用记事本打开文件,则不会出错,程序可以并行访问该文件。但是,如果使用Office Excel打开它,程序会给出错误,上面写着“文件访问被拒绝,因为它被另一个进程使用了”。我想问你:
1)是否可以优先考虑该程序,所以程序仍然可以访问该文件,但用户不能?或者程序和用户都可以访问该文件吗?
2)如果解决方案是用记事本打开文件,有没有办法将此文件的默认程序设置为记事本?或者如何从C#中将csv文件的默认程序更改为记事本?
阅读和编写部分代码如下:
List<string> csvLines = new List<string>();
string address = folderpath + @"\PLC_LOGLARI";
if (!Directory.Exists(address))
Directory.CreateDirectory(address);
string fileAddress = address + @"\" + fileName + "_" + machineNo + "_1.csv";
if (Directory.EnumerateFiles(address).Any(f => f.Contains(fileName + "_" + machineNo)))
{
string[] addressArray = Directory.GetFiles(address, fileName + "_" + machineNo + "*.*");
FileInfo fileInformation = new FileInfo(addressArray[addressArray.Length - 1]);
long fileSize = fileInformation.Length;
if (fileSize > 5000000)
{
int fileNo = int.Parse(addressArray[addressArray.Length - 1].Substring(addressArray[addressArray.Length - 1].LastIndexOf('_') + 1, 1)) + 1;
fileAddress = addressArray[addressArray.Length - 1].Substring(0, addressArray[addressArray.Length - 1].LastIndexOf('_') + 1) + fileNo.ToString() + ".csv";
}
else
{
fileAddress = addressArray[addressArray.Length - 1];
csvLines = File.ReadAllLines(address).ToList();
}
}
else
{
string[] headings = makeHeadings();
csvLines.Add(headings[0]);
csvLines.Add(headings[1]);
}
string newLine = "";
// some operations and calculations for newLine
// some operations and calculations for newLine
// some operations and calculations for newLine
newLine = newLine.Substring(1, newLine.Length-1);
csvLines.Add(newLine);
File.WriteAllLines(fileAddress, csvLines.ToArray());
感谢您的帮助。
答案 0 :(得分:0)
问题2:为了更改默认程序,如果您使用的是Windows,则可以单击开始并查找/键入&#39;默认程序&#39;。根据Windows的版本,基本上找到&#39;将协议的文件类型与程序&#39;或者按文件类型选择默认应用程序&#39;并调整csv文件以使用新的默认程序。
如果程序和记事本都能同时访问该文件,我会非常小心。它首先被阻止的原因是为了防止覆盖文件的内容,因此如果你在程序和记事本中打开它,可能首先测试它。然后程序进行一些更新 - 您还可以使用记事本进行不同的更新。两个变化都会记录下来吗?因为我怀疑最后一次保存&#39;胜利,你可能会失去一些改变。
对于问题1:我猜测打开文件的人首先得到了该文件的锁定。因此,如果Excel打开文件 - 那么程序将出现该错误。反之亦然,如果程序打开了文件 - 则Excel可能在打开该文件时出现问题。我不确定如何优先考虑该计划。