Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
A_R_S
МИР ВАШЕМУ ДОМУ!!!
48 / 49 / 7
Регистрация: 01.04.2009
Сообщений: 890
Записей в блоге: 1
1

Как заблокировать текстовый файл для просмотра

16.03.2012, 09:44. Просмотров 1121. Ответов 1
Метки нет (Все метки)

Здравствуйте друзья.

Думаю есть достаточно средств для блокировки файла (текстового к примеру) средствами c#. Но ниже приведенные примеры я не понял.
Вот способов блокировки и разблокировки:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
using System;
using System.IO;
using System.Text;
 
class FStreamLock
{
    static void Main()
    {
        UnicodeEncoding uniEncoding = new UnicodeEncoding();
        string lastRecordText =
            "The last processed record number was: ";
        int textLength = uniEncoding.GetByteCount(lastRecordText);
        int recordNumber = 13;
        int byteCount =
            uniEncoding.GetByteCount(recordNumber.ToString());
        string tempString;
 
        using (FileStream fileStream = new FileStream(
            "Test.txt", FileMode.Open,
            FileAccess.ReadWrite, FileShare.ReadWrite))
        {
            // Write the original file data.
            if (fileStream.Length == 0)
            {
                tempString =
                    lastRecordText + recordNumber.ToString();
                fileStream.Write(uniEncoding.GetBytes(tempString),
                    0, uniEncoding.GetByteCount(tempString));
            }
 
            // Allow the user to choose the operation.
            char consoleInput = 'R';
            byte[] readText = new byte[fileStream.Length];
            while (consoleInput != 'X')
            {
                Console.Write(
                    "\nEnter 'R' to read, 'W' to write, 'L' to " +
                    "lock, 'U' to unlock, anything else to exit: ");
 
                if ((tempString = Console.ReadLine()).Length == 0)
                {
                    break;
                }
                consoleInput = char.ToUpper(tempString[0]);
                switch (consoleInput)
                {
                    // Read data from the file and 
                    // write it to the console.
                    case 'R':
                        try
                        {
                            fileStream.Seek(0, SeekOrigin.Begin);
                            fileStream.Read(
                                readText, 0, (int)fileStream.Length);
                            tempString = new String(
                                uniEncoding.GetChars(
                                readText, 0, readText.Length));
                            Console.WriteLine(tempString);
                            recordNumber = int.Parse(
                                tempString.Substring(
                                tempString.IndexOf(':') + 2));
                        }
 
                        // Catch the IOException generated if the 
                        // specified part of the file is locked.
                        catch (IOException e)
                        {
                            Console.WriteLine("{0}: The read " +
                                "operation could not be performed " +
                                "because the specified part of the " +
                                "file is locked.",
                                e.GetType().Name);
                        }
                        break;
 
                    // Update the file.
                    case 'W':
                        try
                        {
                            fileStream.Seek(textLength,
                                SeekOrigin.Begin);
                            fileStream.Read(
                                readText, textLength - 1, byteCount);
                            tempString = new String(
                                uniEncoding.GetChars(
                                readText, textLength - 1, byteCount));
                            recordNumber = int.Parse(tempString) + 1;
                            fileStream.Seek(
                                textLength, SeekOrigin.Begin);
                            fileStream.Write(uniEncoding.GetBytes(
                                recordNumber.ToString()),
                                0, byteCount);
                            fileStream.Flush();
                            Console.WriteLine(
                                "Record has been updated.");
                        }
 
                        // Catch the IOException generated if the 
                        // specified part of the file is locked.
                        catch (IOException e)
                        {
                            Console.WriteLine(
                                "{0}: The write operation could not " +
                                "be performed because the specified " +
                                "part of the file is locked.",
                                e.GetType().Name);
                        }
                        break;
 
                    // Lock the specified part of the file.
                    case 'L':
                        try
                        {
                            fileStream.Lock(textLength - 1, byteCount);
                            Console.WriteLine("The specified part " +
                                "of file has been locked.");
                        }
                        catch (IOException e)
                        {
                            Console.WriteLine(
                                "{0}: The specified part of file is" +
                                " already locked.", e.GetType().Name);
                        }
                        break;
 
                    // Unlock the specified part of the file.
                    case 'U':
                        try
                        {
                            fileStream.Unlock(
                                textLength - 1, byteCount);
                            Console.WriteLine("The specified part " +
                                "of file has been unlocked.");
                        }
                        catch (IOException e)
                        {
                            Console.WriteLine(
                                "{0}: The specified part of file is " +
                                "not locked by the current process.",
                                e.GetType().Name);
                        }
                        break;
 
                    // Exit the program.
                    default:
                        consoleInput = 'X';
                        break;
                }
            }
        }
    }
}
Сделал все как тут, в чем принцип блокировки файла по этому методу?
Вот есть файл, я хочу чтоб его никто не открывал для просмотра (только программа которая будет работать с ним).
Можно такое реализовать?

Вот еще пример:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 [DllImport(
"kernel32.dll",
SetLastError = true,
EntryPoint = "CreateFileA"
)]
        internal static extern IntPtr CreateFile(
        String filename,
        UInt32 desiredAccess,
        UInt32 shareMode,
        IntPtr attributes, // Really, this is the SECURITY_ATTRIBUTES pointer
        UInt32 creationDisposition,
        UInt32 flagsAndAttributes,
        IntPtr templateFile
        );
        private const uint FILE_FLAG_BACKUP_SEMANTICS = 0x02000000;
        private const uint FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000;
        const uint FILE_FLAG_POSIX_SEMANTICS = 0x01000000;
 
        private void button3_Click(object sender, EventArgs e)
        {
            IntPtr h = CreateFile(@"E:\test", GENERIC_READ, 0, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS, IntPtr.Zero);
            MessageBox.Show(h.ToString());
            CloseHandle(h);
 
 
        }
Взят тут.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.03.2012, 09:44
Ответы с готовыми решениями:

Как открыть текстовый файл из архива
Помогите открыть файл из архива. На сколько я понял если войти в папку с zip...

Как загрузить файлы (JPG,PDF,Visio) из DB для просмотра и сохранения
Привет! Нужно загрузить файлы (JPG,PDF,Visio) из DB для просмотра в...

Как вывести вывести в текстовый файл элементы из List?
Пытаюсь вывести элементы коллекции List в файл .txt, а там вылезает такая...

Как заблокировать повторную отправку письма
Привет!! как мне сделать чтобы после отправки письмо один раз, потом...

При заходе в приложение для всех программ (процессов) заблокировать доступ к порту и указанному ip
Здравствуйте, нужно реализовать такую идею: При заходе в приложение для всех...

1
egik
12 / 12 / 2
Регистрация: 11.04.2011
Сообщений: 76
16.03.2012, 21:54 2
а может его лучше зашифровать -заменить все знаки на другие а твоя прога перед применением будет его расшифровывать для себя при этом сам файл останется зашифрованым
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2012, 21:54

текстовый файл
нужно переписать слова из одного файла в другой предварительно кое что...

Текстовый файл. строка с 3 "объектами" разделенные разделителем "," как обратиться к каждому из объектов?
Всем добрый день. Имеется текстовый файл. содержимое: более 31.000 строк....

Какими компонентами воспользоваться для организации просмотра данных из БД
В общем сабж.. Какие компоненты с панели инструментов воспользоваться для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru