首页 > 解决方案 > 即使文件当前由另一个 Linux App-2(C++) 写入,Linux App-1(C#) 也不会引发文件访问错误

问题描述

我在 Linux (ubuntu) 服务器上运行的 C# .NET Core 应用程序中遇到了一个奇怪的问题。我们有 2 个应用程序正在运行。App1 开始创建一个文件并写入其中。App2 然后尝试访问该文件,但不会引发任何文件异常。

App1 C++ 代码:

char m_filePath[1024] = "/home/ubuntu/src/Test/123.txt"; 
mode_t perms = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH;
const char buf[512] = "123";
int fd = open(m_filePath, O_RDWR | O_CREAT | O_SYNC |O_EXCL, perms);
if (fd >= 0) 
{
  std::cout<<"Wav file : {} Created successfully "<<std::endl;
} 
while(1)         
{                 
   write(fd,&buf, 1);
}         

App2 C# 代码:

                 var mediaFilePath = @"/home/ubuntu/src/Test/123.txt";
                if (File.Exists(mediaFilePath))
                {
                    var fs = File.OpenWrite(mediaFilePath);
                    fs.Close();
                    fs.Dispose();                        
                    Console.WriteLine("File FREE TO ACCESs");
                }

File.OpenWrite() 不会引发任何 IO 异常,并且 App2 能够毫无问题地访问文件:(

我该如何解决这个问题?

标签: c#linux

解决方案


推荐阅读