これは私がstackoverflow、非常にエキサイティングで尋ねた最初の質問です。私の文法やその他のタイプのミスについては申し訳なく思っていますが、修正していただければ幸いです。私はCSVファイルが特定のフォルダに最初に存在する場合、それをList変数に格納し、いくつかの新しい行を追加し、同じファイルに書き込むプログラムを作成したいと思います。このプロセスは、しばらくの間連続して繰り返されます。C#と並行してユーザーがExcelで開いたときにcsvファイルを読み書きする方法は?
ファイルがプログラムによって読み書きされている間、メモ帳で開かれている場合、エラーは発生せず、プログラムはファイルに同時にアクセスできます。しかし、それがOffice Excelで開かれている場合、プログラムは "ファイルアクセスが他のプロセスで使用されているため拒否されました"というエラーを出します。
1)プログラムに優先順位を付けることができるので、プログラムはファイルにアクセスできますが、ユーザーはできませんか?それとも、プログラムとユーザーの両方がファイルにアクセスできるか?
2)ソリューションがメモ帳でファイルを開く場合、このファイルの既定のプログラムをメモ帳として設定する方法はありますか?または、どのように私はcsvファイルのデフォルトプログラムをC#からメモ帳として変更できますか?コードの
読み書きの部分は、ベローズの通りです:あなたの助けのための
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());
感謝。
ログファイルを作成しているので、あなたが現在経験している落とし穴の多くを避けて、あなたを助けることができる非常に一般的な既存のライブラリを考えましたか? – oerkelens
書き込まれているログファイルを読むには、メモ帳++を使用することを検討してください。それは基本的にあなたの標準的なメモ帳ですが、ステロイドです。 1つの便利なことは、ファイルが変更されたときに通知してリロードすることができるため、ログを非常に簡単に監視できることです。拡張子を.csvから.logまたは.txtに変更すると、Excelがファイルbtwを開くのを停止します。 – oerkelens
お返事ありがとうございます。実際には、新しい行ごとに36バイトをファイルにバイナリ形式で書き出します。これは288列を意味し、期間は500ミリ秒であるため、ファイルには行と列が多すぎます。 Excelを使用していると思います。そのため、私はcsv拡張を選択します。 – Baacus