Почему разные объекты FileStream могут записывать в один и тот же файл? - PullRequest
0 голосов
/ 11 декабря 2018

Почему этот код работает?

let myfile1  = 
    try
        Some (System.IO.File.Open("hello.txt", System.IO.FileMode.Truncate, System.IO.FileAccess.ReadWrite))
    with
        ex -> 
            printfn "Fail" ex.Message
            None

let funfiler (thatfile : System.IO.FileStream) =
    if thatfile.CanWrite then
        printfn "WRITABLE" 

if myfile1.IsSome then
    printfn "SUCCESS"
    funfiler myfile1.Value
    myfile1.Value.Close()

myfile1 является объектом FileStream и имеет зарезервированные разрешения на запись для файла.Два объекта FileStream, открывающие один и тот же файл с разрешениями на запись, приводят к ошибке при объявлении в одной и той же области (если не указан FileShare).Поскольку неизменяемые значения передаются по значению, новый объект FileStream создается из myfile1 в funfiler и, таким образом, два объекта FileStream открывает тот же файл с разрешениями на запись, но в этомслучай, не возникает ошибка - почему?Кроме того, если вы закрываете объект FileStream в funfiler, это также закрывает объект FileStream вне области видимости, поскольку операционная система теперь сообщает вызову Close в funfiler, что другие приложения могут записывать в файл.Тем не менее, myfile1 все еще может попытаться записать в файл, и, таким образом, вызов Close в funfiler будет вводить в заблуждение, если это так, верно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...